xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vfma-vp.ll (revision 8ce81f17a16b8b689895c7c093d0401a75c09882)
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
15declare <vscale x 1 x bfloat> @llvm.vp.fma.nxv1bf16(<vscale x 1 x bfloat>, <vscale x 1 x bfloat>, <vscale x 1 x bfloat>, <vscale x 1 x i1>, i32)
16
17define <vscale x 1 x bfloat> @vfma_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %b, <vscale x 1 x bfloat> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
18; CHECK-LABEL: vfma_vv_nxv1bf16:
19; CHECK:       # %bb.0:
20; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
21; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v10, v0.t
22; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8, v0.t
23; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9, v0.t
24; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
25; CHECK-NEXT:    vfmadd.vv v12, v10, v11, v0.t
26; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
27; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12, v0.t
28; CHECK-NEXT:    ret
29  %v = call <vscale x 1 x bfloat> @llvm.vp.fma.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %b, <vscale x 1 x bfloat> %c, <vscale x 1 x i1> %m, i32 %evl)
30  ret <vscale x 1 x bfloat> %v
31}
32
33define <vscale x 1 x bfloat> @vfma_vv_nxv1bf16_unmasked(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %b, <vscale x 1 x bfloat> %c, i32 zeroext %evl) {
34; CHECK-LABEL: vfma_vv_nxv1bf16_unmasked:
35; CHECK:       # %bb.0:
36; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
37; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v10
38; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
39; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9
40; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
41; CHECK-NEXT:    vfmadd.vv v12, v10, v11
42; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
43; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
44; CHECK-NEXT:    ret
45  %v = call <vscale x 1 x bfloat> @llvm.vp.fma.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %b, <vscale x 1 x bfloat> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
46  ret <vscale x 1 x bfloat> %v
47}
48
49define <vscale x 1 x bfloat> @vfma_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x bfloat> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
50; CHECK-LABEL: vfma_vf_nxv1bf16:
51; CHECK:       # %bb.0:
52; CHECK-NEXT:    fmv.x.h a1, fa0
53; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
54; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
55; CHECK-NEXT:    vmv.v.x v9, a1
56; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v8, v0.t
57; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9, v0.t
58; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
59; CHECK-NEXT:    vfmadd.vv v12, v11, v10, v0.t
60; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
61; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12, v0.t
62; CHECK-NEXT:    ret
63  %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0
64  %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer
65  %v = call <vscale x 1 x bfloat> @llvm.vp.fma.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %vc, <vscale x 1 x i1> %m, i32 %evl)
66  ret <vscale x 1 x bfloat> %v
67}
68
69define <vscale x 1 x bfloat> @vfma_vf_nxv1bf16_commute(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x bfloat> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
70; CHECK-LABEL: vfma_vf_nxv1bf16_commute:
71; CHECK:       # %bb.0:
72; CHECK-NEXT:    fmv.x.h a1, fa0
73; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
74; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
75; CHECK-NEXT:    vmv.v.x v9, a1
76; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v8, v0.t
77; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v9, v0.t
78; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
79; CHECK-NEXT:    vfmadd.vv v11, v8, v10, v0.t
80; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
81; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v11, v0.t
82; CHECK-NEXT:    ret
83  %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0
84  %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer
85  %v = call <vscale x 1 x bfloat> @llvm.vp.fma.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vc, <vscale x 1 x i1> %m, i32 %evl)
86  ret <vscale x 1 x bfloat> %v
87}
88
89define <vscale x 1 x bfloat> @vfma_vf_nxv1bf16_unmasked(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x bfloat> %vc, i32 zeroext %evl) {
90; CHECK-LABEL: vfma_vf_nxv1bf16_unmasked:
91; CHECK:       # %bb.0:
92; CHECK-NEXT:    fmv.x.h a1, fa0
93; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
94; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
95; CHECK-NEXT:    vmv.v.x v9, a1
96; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v8
97; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9
98; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
99; CHECK-NEXT:    vfmadd.vv v12, v11, v10
100; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
101; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
102; CHECK-NEXT:    ret
103  %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0
104  %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer
105  %v = call <vscale x 1 x bfloat> @llvm.vp.fma.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
106  ret <vscale x 1 x bfloat> %v
107}
108
109define <vscale x 1 x bfloat> @vfma_vf_nxv1bf16_unmasked_commute(<vscale x 1 x bfloat> %va, bfloat %b, <vscale x 1 x bfloat> %vc, i32 zeroext %evl) {
110; CHECK-LABEL: vfma_vf_nxv1bf16_unmasked_commute:
111; CHECK:       # %bb.0:
112; CHECK-NEXT:    fmv.x.h a1, fa0
113; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
114; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
115; CHECK-NEXT:    vmv.v.x v9, a1
116; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v8
117; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9
118; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
119; CHECK-NEXT:    vfmadd.vv v12, v11, v10
120; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
121; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
122; CHECK-NEXT:    ret
123  %elt.head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 0
124  %vb = shufflevector <vscale x 1 x bfloat> %elt.head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer
125  %v = call <vscale x 1 x bfloat> @llvm.vp.fma.nxv1bf16(<vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
126  ret <vscale x 1 x bfloat> %v
127}
128
129declare <vscale x 2 x bfloat> @llvm.vp.fma.nxv2bf16(<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x i1>, i32)
130
131define <vscale x 2 x bfloat> @vfma_vv_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %b, <vscale x 2 x bfloat> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
132; CHECK-LABEL: vfma_vv_nxv2bf16:
133; CHECK:       # %bb.0:
134; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
135; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v10, v0.t
136; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8, v0.t
137; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9, v0.t
138; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
139; CHECK-NEXT:    vfmadd.vv v12, v10, v11, v0.t
140; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
141; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12, v0.t
142; CHECK-NEXT:    ret
143  %v = call <vscale x 2 x bfloat> @llvm.vp.fma.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %b, <vscale x 2 x bfloat> %c, <vscale x 2 x i1> %m, i32 %evl)
144  ret <vscale x 2 x bfloat> %v
145}
146
147define <vscale x 2 x bfloat> @vfma_vv_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %b, <vscale x 2 x bfloat> %c, i32 zeroext %evl) {
148; CHECK-LABEL: vfma_vv_nxv2bf16_unmasked:
149; CHECK:       # %bb.0:
150; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
151; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v10
152; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
153; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9
154; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
155; CHECK-NEXT:    vfmadd.vv v12, v10, v11
156; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
157; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
158; CHECK-NEXT:    ret
159  %v = call <vscale x 2 x bfloat> @llvm.vp.fma.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %b, <vscale x 2 x bfloat> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
160  ret <vscale x 2 x bfloat> %v
161}
162
163define <vscale x 2 x bfloat> @vfma_vf_nxv2bf16(<vscale x 2 x bfloat> %va, bfloat %b, <vscale x 2 x bfloat> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
164; CHECK-LABEL: vfma_vf_nxv2bf16:
165; CHECK:       # %bb.0:
166; CHECK-NEXT:    fmv.x.h a1, fa0
167; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
168; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
169; CHECK-NEXT:    vmv.v.x v9, a1
170; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v8, v0.t
171; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9, v0.t
172; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
173; CHECK-NEXT:    vfmadd.vv v12, v11, v10, v0.t
174; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
175; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12, v0.t
176; CHECK-NEXT:    ret
177  %elt.head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0
178  %vb = shufflevector <vscale x 2 x bfloat> %elt.head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer
179  %v = call <vscale x 2 x bfloat> @llvm.vp.fma.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, <vscale x 2 x bfloat> %vc, <vscale x 2 x i1> %m, i32 %evl)
180  ret <vscale x 2 x bfloat> %v
181}
182
183define <vscale x 2 x bfloat> @vfma_vf_nxv2bf16_commute(<vscale x 2 x bfloat> %va, bfloat %b, <vscale x 2 x bfloat> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
184; CHECK-LABEL: vfma_vf_nxv2bf16_commute:
185; CHECK:       # %bb.0:
186; CHECK-NEXT:    fmv.x.h a1, fa0
187; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
188; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
189; CHECK-NEXT:    vmv.v.x v9, a1
190; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v8, v0.t
191; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v9, v0.t
192; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
193; CHECK-NEXT:    vfmadd.vv v11, v8, v10, v0.t
194; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
195; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v11, v0.t
196; CHECK-NEXT:    ret
197  %elt.head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0
198  %vb = shufflevector <vscale x 2 x bfloat> %elt.head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer
199  %v = call <vscale x 2 x bfloat> @llvm.vp.fma.nxv2bf16(<vscale x 2 x bfloat> %vb, <vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vc, <vscale x 2 x i1> %m, i32 %evl)
200  ret <vscale x 2 x bfloat> %v
201}
202
203define <vscale x 2 x bfloat> @vfma_vf_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, bfloat %b, <vscale x 2 x bfloat> %vc, i32 zeroext %evl) {
204; CHECK-LABEL: vfma_vf_nxv2bf16_unmasked:
205; CHECK:       # %bb.0:
206; CHECK-NEXT:    fmv.x.h a1, fa0
207; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
208; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
209; CHECK-NEXT:    vmv.v.x v9, a1
210; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v8
211; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9
212; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
213; CHECK-NEXT:    vfmadd.vv v12, v11, v10
214; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
215; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
216; CHECK-NEXT:    ret
217  %elt.head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0
218  %vb = shufflevector <vscale x 2 x bfloat> %elt.head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer
219  %v = call <vscale x 2 x bfloat> @llvm.vp.fma.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, <vscale x 2 x bfloat> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
220  ret <vscale x 2 x bfloat> %v
221}
222
223define <vscale x 2 x bfloat> @vfma_vf_nxv2bf16_unmasked_commute(<vscale x 2 x bfloat> %va, bfloat %b, <vscale x 2 x bfloat> %vc, i32 zeroext %evl) {
224; CHECK-LABEL: vfma_vf_nxv2bf16_unmasked_commute:
225; CHECK:       # %bb.0:
226; CHECK-NEXT:    fmv.x.h a1, fa0
227; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
228; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
229; CHECK-NEXT:    vmv.v.x v9, a1
230; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v8
231; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v9
232; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
233; CHECK-NEXT:    vfmadd.vv v12, v11, v10
234; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
235; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12
236; CHECK-NEXT:    ret
237  %elt.head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0
238  %vb = shufflevector <vscale x 2 x bfloat> %elt.head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer
239  %v = call <vscale x 2 x bfloat> @llvm.vp.fma.nxv2bf16(<vscale x 2 x bfloat> %vb, <vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
240  ret <vscale x 2 x bfloat> %v
241}
242
243declare <vscale x 4 x bfloat> @llvm.vp.fma.nxv4bf16(<vscale x 4 x bfloat>, <vscale x 4 x bfloat>, <vscale x 4 x bfloat>, <vscale x 4 x i1>, i32)
244
245define <vscale x 4 x bfloat> @vfma_vv_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %b, <vscale x 4 x bfloat> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
246; CHECK-LABEL: vfma_vv_nxv4bf16:
247; CHECK:       # %bb.0:
248; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
249; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10, v0.t
250; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8, v0.t
251; CHECK-NEXT:    vfwcvtbf16.f.f.v v14, v9, v0.t
252; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
253; CHECK-NEXT:    vfmadd.vv v14, v10, v12, v0.t
254; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
255; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v14, v0.t
256; CHECK-NEXT:    ret
257  %v = call <vscale x 4 x bfloat> @llvm.vp.fma.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %b, <vscale x 4 x bfloat> %c, <vscale x 4 x i1> %m, i32 %evl)
258  ret <vscale x 4 x bfloat> %v
259}
260
261define <vscale x 4 x bfloat> @vfma_vv_nxv4bf16_unmasked(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %b, <vscale x 4 x bfloat> %c, i32 zeroext %evl) {
262; CHECK-LABEL: vfma_vv_nxv4bf16_unmasked:
263; CHECK:       # %bb.0:
264; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
265; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
266; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
267; CHECK-NEXT:    vfwcvtbf16.f.f.v v14, v9
268; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
269; CHECK-NEXT:    vfmadd.vv v14, v10, v12
270; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
271; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v14
272; CHECK-NEXT:    ret
273  %v = call <vscale x 4 x bfloat> @llvm.vp.fma.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %b, <vscale x 4 x bfloat> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
274  ret <vscale x 4 x bfloat> %v
275}
276
277define <vscale x 4 x bfloat> @vfma_vf_nxv4bf16(<vscale x 4 x bfloat> %va, bfloat %b, <vscale x 4 x bfloat> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
278; CHECK-LABEL: vfma_vf_nxv4bf16:
279; CHECK:       # %bb.0:
280; CHECK-NEXT:    fmv.x.h a1, fa0
281; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
282; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
283; CHECK-NEXT:    vmv.v.x v9, a1
284; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8, v0.t
285; CHECK-NEXT:    vfwcvtbf16.f.f.v v14, v9, v0.t
286; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
287; CHECK-NEXT:    vfmadd.vv v14, v12, v10, v0.t
288; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
289; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v14, v0.t
290; CHECK-NEXT:    ret
291  %elt.head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0
292  %vb = shufflevector <vscale x 4 x bfloat> %elt.head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer
293  %v = call <vscale x 4 x bfloat> @llvm.vp.fma.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb, <vscale x 4 x bfloat> %vc, <vscale x 4 x i1> %m, i32 %evl)
294  ret <vscale x 4 x bfloat> %v
295}
296
297define <vscale x 4 x bfloat> @vfma_vf_nxv4bf16_commute(<vscale x 4 x bfloat> %va, bfloat %b, <vscale x 4 x bfloat> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
298; CHECK-LABEL: vfma_vf_nxv4bf16_commute:
299; CHECK:       # %bb.0:
300; CHECK-NEXT:    fmv.x.h a1, fa0
301; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
302; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9, v0.t
303; CHECK-NEXT:    vmv.v.x v9, a1
304; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8, v0.t
305; CHECK-NEXT:    vfwcvtbf16.f.f.v v14, v9, v0.t
306; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
307; CHECK-NEXT:    vfmadd.vv v12, v14, v10, v0.t
308; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
309; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12, v0.t
310; CHECK-NEXT:    ret
311  %elt.head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0
312  %vb = shufflevector <vscale x 4 x bfloat> %elt.head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer
313  %v = call <vscale x 4 x bfloat> @llvm.vp.fma.nxv4bf16(<vscale x 4 x bfloat> %vb, <vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vc, <vscale x 4 x i1> %m, i32 %evl)
314  ret <vscale x 4 x bfloat> %v
315}
316
317define <vscale x 4 x bfloat> @vfma_vf_nxv4bf16_unmasked(<vscale x 4 x bfloat> %va, bfloat %b, <vscale x 4 x bfloat> %vc, i32 zeroext %evl) {
318; CHECK-LABEL: vfma_vf_nxv4bf16_unmasked:
319; CHECK:       # %bb.0:
320; CHECK-NEXT:    fmv.x.h a1, fa0
321; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
322; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
323; CHECK-NEXT:    vmv.v.x v9, a1
324; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
325; CHECK-NEXT:    vfwcvtbf16.f.f.v v14, v9
326; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
327; CHECK-NEXT:    vfmadd.vv v14, v12, v10
328; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
329; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v14
330; CHECK-NEXT:    ret
331  %elt.head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0
332  %vb = shufflevector <vscale x 4 x bfloat> %elt.head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer
333  %v = call <vscale x 4 x bfloat> @llvm.vp.fma.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb, <vscale x 4 x bfloat> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
334  ret <vscale x 4 x bfloat> %v
335}
336
337define <vscale x 4 x bfloat> @vfma_vf_nxv4bf16_unmasked_commute(<vscale x 4 x bfloat> %va, bfloat %b, <vscale x 4 x bfloat> %vc, i32 zeroext %evl) {
338; CHECK-LABEL: vfma_vf_nxv4bf16_unmasked_commute:
339; CHECK:       # %bb.0:
340; CHECK-NEXT:    fmv.x.h a1, fa0
341; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
342; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9
343; CHECK-NEXT:    vmv.v.x v9, a1
344; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
345; CHECK-NEXT:    vfwcvtbf16.f.f.v v14, v9
346; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
347; CHECK-NEXT:    vfmadd.vv v14, v12, v10
348; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
349; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v14
350; CHECK-NEXT:    ret
351  %elt.head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0
352  %vb = shufflevector <vscale x 4 x bfloat> %elt.head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer
353  %v = call <vscale x 4 x bfloat> @llvm.vp.fma.nxv4bf16(<vscale x 4 x bfloat> %vb, <vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
354  ret <vscale x 4 x bfloat> %v
355}
356
357declare <vscale x 8 x bfloat> @llvm.vp.fma.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x i1>, i32)
358
359define <vscale x 8 x bfloat> @vfma_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %b, <vscale x 8 x bfloat> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
360; CHECK-LABEL: vfma_vv_nxv8bf16:
361; CHECK:       # %bb.0:
362; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
363; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12, v0.t
364; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8, v0.t
365; CHECK-NEXT:    vfwcvtbf16.f.f.v v20, v10, v0.t
366; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
367; CHECK-NEXT:    vfmadd.vv v20, v12, v16, v0.t
368; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
369; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v20, v0.t
370; CHECK-NEXT:    ret
371  %v = call <vscale x 8 x bfloat> @llvm.vp.fma.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %b, <vscale x 8 x bfloat> %c, <vscale x 8 x i1> %m, i32 %evl)
372  ret <vscale x 8 x bfloat> %v
373}
374
375define <vscale x 8 x bfloat> @vfma_vv_nxv8bf16_unmasked(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %b, <vscale x 8 x bfloat> %c, i32 zeroext %evl) {
376; CHECK-LABEL: vfma_vv_nxv8bf16_unmasked:
377; CHECK:       # %bb.0:
378; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
379; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12
380; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
381; CHECK-NEXT:    vfwcvtbf16.f.f.v v20, v10
382; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
383; CHECK-NEXT:    vfmadd.vv v20, v12, v16
384; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
385; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v20
386; CHECK-NEXT:    ret
387  %v = call <vscale x 8 x bfloat> @llvm.vp.fma.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %b, <vscale x 8 x bfloat> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
388  ret <vscale x 8 x bfloat> %v
389}
390
391define <vscale x 8 x bfloat> @vfma_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x bfloat> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
392; CHECK-LABEL: vfma_vf_nxv8bf16:
393; CHECK:       # %bb.0:
394; CHECK-NEXT:    fmv.x.h a1, fa0
395; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
396; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10, v0.t
397; CHECK-NEXT:    vmv.v.x v10, a1
398; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8, v0.t
399; CHECK-NEXT:    vfwcvtbf16.f.f.v v20, v10, v0.t
400; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
401; CHECK-NEXT:    vfmadd.vv v20, v16, v12, v0.t
402; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
403; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v20, v0.t
404; CHECK-NEXT:    ret
405  %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
406  %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
407  %v = call <vscale x 8 x bfloat> @llvm.vp.fma.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %vc, <vscale x 8 x i1> %m, i32 %evl)
408  ret <vscale x 8 x bfloat> %v
409}
410
411define <vscale x 8 x bfloat> @vfma_vf_nxv8bf16_commute(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x bfloat> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
412; CHECK-LABEL: vfma_vf_nxv8bf16_commute:
413; CHECK:       # %bb.0:
414; CHECK-NEXT:    fmv.x.h a1, fa0
415; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
416; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10, v0.t
417; CHECK-NEXT:    vmv.v.x v10, a1
418; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8, v0.t
419; CHECK-NEXT:    vfwcvtbf16.f.f.v v20, v10, v0.t
420; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
421; CHECK-NEXT:    vfmadd.vv v16, v20, v12, v0.t
422; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
423; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
424; CHECK-NEXT:    ret
425  %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
426  %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
427  %v = call <vscale x 8 x bfloat> @llvm.vp.fma.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vc, <vscale x 8 x i1> %m, i32 %evl)
428  ret <vscale x 8 x bfloat> %v
429}
430
431define <vscale x 8 x bfloat> @vfma_vf_nxv8bf16_unmasked(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x bfloat> %vc, i32 zeroext %evl) {
432; CHECK-LABEL: vfma_vf_nxv8bf16_unmasked:
433; CHECK:       # %bb.0:
434; CHECK-NEXT:    fmv.x.h a1, fa0
435; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
436; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
437; CHECK-NEXT:    vmv.v.x v10, a1
438; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
439; CHECK-NEXT:    vfwcvtbf16.f.f.v v20, v10
440; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
441; CHECK-NEXT:    vfmadd.vv v20, v16, v12
442; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
443; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v20
444; CHECK-NEXT:    ret
445  %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
446  %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
447  %v = call <vscale x 8 x bfloat> @llvm.vp.fma.nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
448  ret <vscale x 8 x bfloat> %v
449}
450
451define <vscale x 8 x bfloat> @vfma_vf_nxv8bf16_unmasked_commute(<vscale x 8 x bfloat> %va, bfloat %b, <vscale x 8 x bfloat> %vc, i32 zeroext %evl) {
452; CHECK-LABEL: vfma_vf_nxv8bf16_unmasked_commute:
453; CHECK:       # %bb.0:
454; CHECK-NEXT:    fmv.x.h a1, fa0
455; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
456; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
457; CHECK-NEXT:    vmv.v.x v10, a1
458; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
459; CHECK-NEXT:    vfwcvtbf16.f.f.v v20, v10
460; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
461; CHECK-NEXT:    vfmadd.vv v20, v16, v12
462; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
463; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v20
464; CHECK-NEXT:    ret
465  %elt.head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
466  %vb = shufflevector <vscale x 8 x bfloat> %elt.head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
467  %v = call <vscale x 8 x bfloat> @llvm.vp.fma.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
468  ret <vscale x 8 x bfloat> %v
469}
470
471declare <vscale x 16 x bfloat> @llvm.vp.fma.nxv16bf16(<vscale x 16 x bfloat>, <vscale x 16 x bfloat>, <vscale x 16 x bfloat>, <vscale x 16 x i1>, i32)
472
473define <vscale x 16 x bfloat> @vfma_vv_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %b, <vscale x 16 x bfloat> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
474; CHECK-LABEL: vfma_vv_nxv16bf16:
475; CHECK:       # %bb.0:
476; CHECK-NEXT:    addi sp, sp, -16
477; CHECK-NEXT:    .cfi_def_cfa_offset 16
478; CHECK-NEXT:    csrr a1, vlenb
479; CHECK-NEXT:    slli a1, a1, 3
480; CHECK-NEXT:    sub sp, sp, a1
481; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
482; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
483; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16, v0.t
484; CHECK-NEXT:    addi a0, sp, 16
485; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
486; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8, v0.t
487; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12, v0.t
488; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
489; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
490; CHECK-NEXT:    vfmadd.vv v16, v24, v8, v0.t
491; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
492; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
493; CHECK-NEXT:    csrr a0, vlenb
494; CHECK-NEXT:    slli a0, a0, 3
495; CHECK-NEXT:    add sp, sp, a0
496; CHECK-NEXT:    .cfi_def_cfa sp, 16
497; CHECK-NEXT:    addi sp, sp, 16
498; CHECK-NEXT:    .cfi_def_cfa_offset 0
499; CHECK-NEXT:    ret
500  %v = call <vscale x 16 x bfloat> @llvm.vp.fma.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %b, <vscale x 16 x bfloat> %c, <vscale x 16 x i1> %m, i32 %evl)
501  ret <vscale x 16 x bfloat> %v
502}
503
504define <vscale x 16 x bfloat> @vfma_vv_nxv16bf16_unmasked(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %b, <vscale x 16 x bfloat> %c, i32 zeroext %evl) {
505; CHECK-LABEL: vfma_vv_nxv16bf16_unmasked:
506; CHECK:       # %bb.0:
507; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
508; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16
509; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
510; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v12
511; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
512; CHECK-NEXT:    vfmadd.vv v0, v16, v24
513; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
514; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0
515; CHECK-NEXT:    ret
516  %v = call <vscale x 16 x bfloat> @llvm.vp.fma.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %b, <vscale x 16 x bfloat> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
517  ret <vscale x 16 x bfloat> %v
518}
519
520define <vscale x 16 x bfloat> @vfma_vf_nxv16bf16(<vscale x 16 x bfloat> %va, bfloat %b, <vscale x 16 x bfloat> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
521; CHECK-LABEL: vfma_vf_nxv16bf16:
522; CHECK:       # %bb.0:
523; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
524; CHECK-NEXT:    vmv4r.v v16, v8
525; CHECK-NEXT:    fmv.x.h a0, fa0
526; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12, v0.t
527; CHECK-NEXT:    vmv8r.v v8, v24
528; CHECK-NEXT:    vmv.v.x v4, a0
529; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16, v0.t
530; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v4, v0.t
531; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
532; CHECK-NEXT:    vfmadd.vv v16, v24, v8, v0.t
533; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
534; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
535; CHECK-NEXT:    ret
536  %elt.head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0
537  %vb = shufflevector <vscale x 16 x bfloat> %elt.head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer
538  %v = call <vscale x 16 x bfloat> @llvm.vp.fma.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, <vscale x 16 x bfloat> %vc, <vscale x 16 x i1> %m, i32 %evl)
539  ret <vscale x 16 x bfloat> %v
540}
541
542define <vscale x 16 x bfloat> @vfma_vf_nxv16bf16_commute(<vscale x 16 x bfloat> %va, bfloat %b, <vscale x 16 x bfloat> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
543; CHECK-LABEL: vfma_vf_nxv16bf16_commute:
544; CHECK:       # %bb.0:
545; CHECK-NEXT:    fmv.x.h a1, fa0
546; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
547; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12, v0.t
548; CHECK-NEXT:    vmv.v.x v4, a1
549; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8, v0.t
550; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v4, v0.t
551; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
552; CHECK-NEXT:    vfmadd.vv v24, v8, v16, v0.t
553; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
554; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v24, v0.t
555; CHECK-NEXT:    ret
556  %elt.head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0
557  %vb = shufflevector <vscale x 16 x bfloat> %elt.head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer
558  %v = call <vscale x 16 x bfloat> @llvm.vp.fma.nxv16bf16(<vscale x 16 x bfloat> %vb, <vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vc, <vscale x 16 x i1> %m, i32 %evl)
559  ret <vscale x 16 x bfloat> %v
560}
561
562define <vscale x 16 x bfloat> @vfma_vf_nxv16bf16_unmasked(<vscale x 16 x bfloat> %va, bfloat %b, <vscale x 16 x bfloat> %vc, i32 zeroext %evl) {
563; CHECK-LABEL: vfma_vf_nxv16bf16_unmasked:
564; CHECK:       # %bb.0:
565; CHECK-NEXT:    fmv.x.h a1, fa0
566; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
567; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12
568; CHECK-NEXT:    vmv.v.x v12, a1
569; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8
570; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v12
571; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
572; CHECK-NEXT:    vfmadd.vv v0, v24, v16
573; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
574; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0
575; CHECK-NEXT:    ret
576  %elt.head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0
577  %vb = shufflevector <vscale x 16 x bfloat> %elt.head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer
578  %v = call <vscale x 16 x bfloat> @llvm.vp.fma.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, <vscale x 16 x bfloat> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
579  ret <vscale x 16 x bfloat> %v
580}
581
582define <vscale x 16 x bfloat> @vfma_vf_nxv16bf16_unmasked_commute(<vscale x 16 x bfloat> %va, bfloat %b, <vscale x 16 x bfloat> %vc, i32 zeroext %evl) {
583; CHECK-LABEL: vfma_vf_nxv16bf16_unmasked_commute:
584; CHECK:       # %bb.0:
585; CHECK-NEXT:    fmv.x.h a1, fa0
586; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
587; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12
588; CHECK-NEXT:    vmv.v.x v12, a1
589; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8
590; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v12
591; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
592; CHECK-NEXT:    vfmadd.vv v0, v24, v16
593; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
594; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0
595; CHECK-NEXT:    ret
596  %elt.head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0
597  %vb = shufflevector <vscale x 16 x bfloat> %elt.head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer
598  %v = call <vscale x 16 x bfloat> @llvm.vp.fma.nxv16bf16(<vscale x 16 x bfloat> %vb, <vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
599  ret <vscale x 16 x bfloat> %v
600}
601
602declare <vscale x 32 x bfloat> @llvm.vp.fma.nxv32bf16(<vscale x 32 x bfloat>, <vscale x 32 x bfloat>, <vscale x 32 x bfloat>, <vscale x 32 x i1>, i32)
603
604define <vscale x 32 x bfloat> @vfma_vv_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %b, <vscale x 32 x bfloat> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
605; CHECK-LABEL: vfma_vv_nxv32bf16:
606; CHECK:       # %bb.0:
607; CHECK-NEXT:    addi sp, sp, -16
608; CHECK-NEXT:    .cfi_def_cfa_offset 16
609; CHECK-NEXT:    csrr a2, vlenb
610; CHECK-NEXT:    slli a2, a2, 3
611; CHECK-NEXT:    mv a3, a2
612; CHECK-NEXT:    slli a2, a2, 2
613; CHECK-NEXT:    add a2, a2, a3
614; CHECK-NEXT:    sub sp, sp, a2
615; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
616; CHECK-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
617; CHECK-NEXT:    vmv1r.v v7, v0
618; CHECK-NEXT:    csrr a2, vlenb
619; CHECK-NEXT:    slli a2, a2, 5
620; CHECK-NEXT:    add a2, sp, a2
621; CHECK-NEXT:    addi a2, a2, 16
622; CHECK-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
623; CHECK-NEXT:    vmv8r.v v24, v8
624; CHECK-NEXT:    vl8re16.v v8, (a0)
625; CHECK-NEXT:    csrr a2, vlenb
626; CHECK-NEXT:    slli a0, a2, 1
627; CHECK-NEXT:    srli a2, a2, 2
628; CHECK-NEXT:    sub a3, a1, a0
629; CHECK-NEXT:    vslidedown.vx v0, v0, a2
630; CHECK-NEXT:    sltu a2, a1, a3
631; CHECK-NEXT:    addi a2, a2, -1
632; CHECK-NEXT:    and a2, a2, a3
633; CHECK-NEXT:    csrr a3, vlenb
634; CHECK-NEXT:    slli a3, a3, 4
635; CHECK-NEXT:    add a3, sp, a3
636; CHECK-NEXT:    addi a3, a3, 16
637; CHECK-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
638; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
639; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12, v0.t
640; CHECK-NEXT:    csrr a2, vlenb
641; CHECK-NEXT:    slli a2, a2, 3
642; CHECK-NEXT:    add a2, sp, a2
643; CHECK-NEXT:    addi a2, a2, 16
644; CHECK-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
645; CHECK-NEXT:    csrr a2, vlenb
646; CHECK-NEXT:    slli a2, a2, 3
647; CHECK-NEXT:    mv a3, a2
648; CHECK-NEXT:    slli a2, a2, 1
649; CHECK-NEXT:    add a2, a2, a3
650; CHECK-NEXT:    add a2, sp, a2
651; CHECK-NEXT:    addi a2, a2, 16
652; CHECK-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
653; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v28, v0.t
654; CHECK-NEXT:    csrr a2, vlenb
655; CHECK-NEXT:    slli a2, a2, 5
656; CHECK-NEXT:    add a2, sp, a2
657; CHECK-NEXT:    addi a2, a2, 16
658; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
659; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12, v0.t
660; CHECK-NEXT:    csrr a2, vlenb
661; CHECK-NEXT:    slli a2, a2, 3
662; CHECK-NEXT:    add a2, sp, a2
663; CHECK-NEXT:    addi a2, a2, 16
664; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
665; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
666; CHECK-NEXT:    vfmadd.vv v24, v16, v8, v0.t
667; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
668; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v24, v0.t
669; CHECK-NEXT:    addi a2, sp, 16
670; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
671; CHECK-NEXT:    bltu a1, a0, .LBB30_2
672; CHECK-NEXT:  # %bb.1:
673; CHECK-NEXT:    mv a1, a0
674; CHECK-NEXT:  .LBB30_2:
675; CHECK-NEXT:    vmv1r.v v0, v7
676; CHECK-NEXT:    csrr a0, vlenb
677; CHECK-NEXT:    slli a0, a0, 4
678; CHECK-NEXT:    add a0, sp, a0
679; CHECK-NEXT:    addi a0, a0, 16
680; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
681; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
682; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8, v0.t
683; CHECK-NEXT:    csrr a0, vlenb
684; CHECK-NEXT:    slli a0, a0, 3
685; CHECK-NEXT:    add a0, sp, a0
686; CHECK-NEXT:    addi a0, a0, 16
687; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
688; CHECK-NEXT:    csrr a0, vlenb
689; CHECK-NEXT:    slli a0, a0, 3
690; CHECK-NEXT:    mv a1, a0
691; CHECK-NEXT:    slli a0, a0, 1
692; CHECK-NEXT:    add a0, a0, a1
693; CHECK-NEXT:    add a0, sp, a0
694; CHECK-NEXT:    addi a0, a0, 16
695; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
696; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8, v0.t
697; CHECK-NEXT:    csrr a0, vlenb
698; CHECK-NEXT:    slli a0, a0, 4
699; CHECK-NEXT:    add a0, sp, a0
700; CHECK-NEXT:    addi a0, a0, 16
701; CHECK-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
702; CHECK-NEXT:    csrr a0, vlenb
703; CHECK-NEXT:    slli a0, a0, 5
704; CHECK-NEXT:    add a0, sp, a0
705; CHECK-NEXT:    addi a0, a0, 16
706; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
707; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v24, v0.t
708; CHECK-NEXT:    csrr a0, vlenb
709; CHECK-NEXT:    slli a0, a0, 3
710; CHECK-NEXT:    add a0, sp, a0
711; CHECK-NEXT:    addi a0, a0, 16
712; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
713; CHECK-NEXT:    csrr a0, vlenb
714; CHECK-NEXT:    slli a0, a0, 4
715; CHECK-NEXT:    add a0, sp, a0
716; CHECK-NEXT:    addi a0, a0, 16
717; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
718; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
719; CHECK-NEXT:    vfmadd.vv v8, v16, v24, v0.t
720; CHECK-NEXT:    vmv.v.v v16, v8
721; CHECK-NEXT:    addi a0, sp, 16
722; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
723; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
724; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
725; CHECK-NEXT:    csrr a0, vlenb
726; CHECK-NEXT:    slli a0, a0, 3
727; CHECK-NEXT:    mv a1, a0
728; CHECK-NEXT:    slli a0, a0, 2
729; CHECK-NEXT:    add a0, a0, a1
730; CHECK-NEXT:    add sp, sp, a0
731; CHECK-NEXT:    .cfi_def_cfa sp, 16
732; CHECK-NEXT:    addi sp, sp, 16
733; CHECK-NEXT:    .cfi_def_cfa_offset 0
734; CHECK-NEXT:    ret
735  %v = call <vscale x 32 x bfloat> @llvm.vp.fma.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %b, <vscale x 32 x bfloat> %c, <vscale x 32 x i1> %m, i32 %evl)
736  ret <vscale x 32 x bfloat> %v
737}
738
739define <vscale x 32 x bfloat> @vfma_vv_nxv32bf16_unmasked(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %b, <vscale x 32 x bfloat> %c, i32 zeroext %evl) {
740; CHECK-LABEL: vfma_vv_nxv32bf16_unmasked:
741; CHECK:       # %bb.0:
742; CHECK-NEXT:    addi sp, sp, -16
743; CHECK-NEXT:    .cfi_def_cfa_offset 16
744; CHECK-NEXT:    csrr a2, vlenb
745; CHECK-NEXT:    slli a2, a2, 5
746; CHECK-NEXT:    sub sp, sp, a2
747; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
748; CHECK-NEXT:    csrr a2, vlenb
749; CHECK-NEXT:    slli a2, a2, 3
750; CHECK-NEXT:    mv a3, a2
751; CHECK-NEXT:    slli a2, a2, 1
752; CHECK-NEXT:    add a2, a2, a3
753; CHECK-NEXT:    add a2, sp, a2
754; CHECK-NEXT:    addi a2, a2, 16
755; CHECK-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
756; CHECK-NEXT:    vl8re16.v v16, (a0)
757; CHECK-NEXT:    csrr a2, vlenb
758; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
759; CHECK-NEXT:    vmset.m v24
760; CHECK-NEXT:    slli a0, a2, 1
761; CHECK-NEXT:    srli a2, a2, 2
762; CHECK-NEXT:    sub a3, a1, a0
763; CHECK-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
764; CHECK-NEXT:    vslidedown.vx v0, v24, a2
765; CHECK-NEXT:    sltu a2, a1, a3
766; CHECK-NEXT:    addi a2, a2, -1
767; CHECK-NEXT:    and a2, a2, a3
768; CHECK-NEXT:    csrr a3, vlenb
769; CHECK-NEXT:    slli a3, a3, 3
770; CHECK-NEXT:    add a3, sp, a3
771; CHECK-NEXT:    addi a3, a3, 16
772; CHECK-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
773; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
774; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v20, v0.t
775; CHECK-NEXT:    addi a2, sp, 16
776; CHECK-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
777; CHECK-NEXT:    csrr a2, vlenb
778; CHECK-NEXT:    slli a2, a2, 4
779; CHECK-NEXT:    add a2, sp, a2
780; CHECK-NEXT:    addi a2, a2, 16
781; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
782; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12, v0.t
783; CHECK-NEXT:    csrr a2, vlenb
784; CHECK-NEXT:    slli a2, a2, 3
785; CHECK-NEXT:    mv a3, a2
786; CHECK-NEXT:    slli a2, a2, 1
787; CHECK-NEXT:    add a2, a2, a3
788; CHECK-NEXT:    add a2, sp, a2
789; CHECK-NEXT:    addi a2, a2, 16
790; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
791; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v20, v0.t
792; CHECK-NEXT:    addi a2, sp, 16
793; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
794; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
795; CHECK-NEXT:    vfmadd.vv v8, v24, v16, v0.t
796; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
797; CHECK-NEXT:    vfncvtbf16.f.f.w v20, v8, v0.t
798; CHECK-NEXT:    bltu a1, a0, .LBB31_2
799; CHECK-NEXT:  # %bb.1:
800; CHECK-NEXT:    mv a1, a0
801; CHECK-NEXT:  .LBB31_2:
802; CHECK-NEXT:    csrr a0, vlenb
803; CHECK-NEXT:    slli a0, a0, 3
804; CHECK-NEXT:    add a0, sp, a0
805; CHECK-NEXT:    addi a0, a0, 16
806; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
807; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
808; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8
809; CHECK-NEXT:    addi a0, sp, 16
810; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
811; CHECK-NEXT:    csrr a0, vlenb
812; CHECK-NEXT:    slli a0, a0, 4
813; CHECK-NEXT:    add a0, sp, a0
814; CHECK-NEXT:    addi a0, a0, 16
815; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
816; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8
817; CHECK-NEXT:    csrr a0, vlenb
818; CHECK-NEXT:    slli a0, a0, 3
819; CHECK-NEXT:    mv a1, a0
820; CHECK-NEXT:    slli a0, a0, 1
821; CHECK-NEXT:    add a0, a0, a1
822; CHECK-NEXT:    add a0, sp, a0
823; CHECK-NEXT:    addi a0, a0, 16
824; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
825; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v8
826; CHECK-NEXT:    addi a0, sp, 16
827; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
828; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
829; CHECK-NEXT:    vfmadd.vv v0, v24, v8
830; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
831; CHECK-NEXT:    vfncvtbf16.f.f.w v16, v0
832; CHECK-NEXT:    vmv8r.v v8, v16
833; CHECK-NEXT:    csrr a0, vlenb
834; CHECK-NEXT:    slli a0, a0, 5
835; CHECK-NEXT:    add sp, sp, a0
836; CHECK-NEXT:    .cfi_def_cfa sp, 16
837; CHECK-NEXT:    addi sp, sp, 16
838; CHECK-NEXT:    .cfi_def_cfa_offset 0
839; CHECK-NEXT:    ret
840  %v = call <vscale x 32 x bfloat> @llvm.vp.fma.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %b, <vscale x 32 x bfloat> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl)
841  ret <vscale x 32 x bfloat> %v
842}
843
844define <vscale x 32 x bfloat> @vfma_vf_nxv32bf16(<vscale x 32 x bfloat> %va, bfloat %b, <vscale x 32 x bfloat> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
845; CHECK-LABEL: vfma_vf_nxv32bf16:
846; CHECK:       # %bb.0:
847; CHECK-NEXT:    addi sp, sp, -16
848; CHECK-NEXT:    .cfi_def_cfa_offset 16
849; CHECK-NEXT:    csrr a1, vlenb
850; CHECK-NEXT:    slli a1, a1, 3
851; CHECK-NEXT:    mv a2, a1
852; CHECK-NEXT:    slli a1, a1, 2
853; CHECK-NEXT:    add a1, a1, a2
854; CHECK-NEXT:    sub sp, sp, a1
855; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
856; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
857; CHECK-NEXT:    vmv1r.v v7, v0
858; CHECK-NEXT:    vmv8r.v v24, v8
859; CHECK-NEXT:    fmv.x.h a2, fa0
860; CHECK-NEXT:    csrr a3, vlenb
861; CHECK-NEXT:    slli a1, a3, 1
862; CHECK-NEXT:    srli a3, a3, 2
863; CHECK-NEXT:    sub a4, a0, a1
864; CHECK-NEXT:    vslidedown.vx v0, v0, a3
865; CHECK-NEXT:    sltu a3, a0, a4
866; CHECK-NEXT:    addi a3, a3, -1
867; CHECK-NEXT:    and a3, a3, a4
868; CHECK-NEXT:    csrr a4, vlenb
869; CHECK-NEXT:    slli a4, a4, 4
870; CHECK-NEXT:    add a4, sp, a4
871; CHECK-NEXT:    addi a4, a4, 16
872; CHECK-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
873; CHECK-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
874; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v20, v0.t
875; CHECK-NEXT:    csrr a4, vlenb
876; CHECK-NEXT:    slli a4, a4, 3
877; CHECK-NEXT:    add a4, sp, a4
878; CHECK-NEXT:    addi a4, a4, 16
879; CHECK-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
880; CHECK-NEXT:    csrr a4, vlenb
881; CHECK-NEXT:    slli a4, a4, 3
882; CHECK-NEXT:    mv a5, a4
883; CHECK-NEXT:    slli a4, a4, 1
884; CHECK-NEXT:    add a4, a4, a5
885; CHECK-NEXT:    add a4, sp, a4
886; CHECK-NEXT:    addi a4, a4, 16
887; CHECK-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
888; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v28, v0.t
889; CHECK-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
890; CHECK-NEXT:    vmv.v.x v24, a2
891; CHECK-NEXT:    csrr a2, vlenb
892; CHECK-NEXT:    slli a2, a2, 5
893; CHECK-NEXT:    add a2, sp, a2
894; CHECK-NEXT:    addi a2, a2, 16
895; CHECK-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
896; CHECK-NEXT:    csrr a2, vlenb
897; CHECK-NEXT:    slli a2, a2, 5
898; CHECK-NEXT:    add a2, sp, a2
899; CHECK-NEXT:    addi a2, a2, 16
900; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
901; CHECK-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
902; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12, v0.t
903; CHECK-NEXT:    csrr a2, vlenb
904; CHECK-NEXT:    slli a2, a2, 3
905; CHECK-NEXT:    add a2, sp, a2
906; CHECK-NEXT:    addi a2, a2, 16
907; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
908; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
909; CHECK-NEXT:    vfmadd.vv v24, v16, v8, v0.t
910; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
911; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v24, v0.t
912; CHECK-NEXT:    addi a2, sp, 16
913; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
914; CHECK-NEXT:    bltu a0, a1, .LBB32_2
915; CHECK-NEXT:  # %bb.1:
916; CHECK-NEXT:    mv a0, a1
917; CHECK-NEXT:  .LBB32_2:
918; CHECK-NEXT:    vmv1r.v v0, v7
919; CHECK-NEXT:    csrr a1, vlenb
920; CHECK-NEXT:    slli a1, a1, 4
921; CHECK-NEXT:    add a1, sp, a1
922; CHECK-NEXT:    addi a1, a1, 16
923; CHECK-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
924; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
925; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8, v0.t
926; CHECK-NEXT:    csrr a0, vlenb
927; CHECK-NEXT:    slli a0, a0, 3
928; CHECK-NEXT:    add a0, sp, a0
929; CHECK-NEXT:    addi a0, a0, 16
930; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
931; CHECK-NEXT:    csrr a0, vlenb
932; CHECK-NEXT:    slli a0, a0, 3
933; CHECK-NEXT:    mv a1, a0
934; CHECK-NEXT:    slli a0, a0, 1
935; CHECK-NEXT:    add a0, a0, a1
936; CHECK-NEXT:    add a0, sp, a0
937; CHECK-NEXT:    addi a0, a0, 16
938; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
939; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8, v0.t
940; CHECK-NEXT:    csrr a0, vlenb
941; CHECK-NEXT:    slli a0, a0, 4
942; CHECK-NEXT:    add a0, sp, a0
943; CHECK-NEXT:    addi a0, a0, 16
944; CHECK-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
945; CHECK-NEXT:    csrr a0, vlenb
946; CHECK-NEXT:    slli a0, a0, 5
947; CHECK-NEXT:    add a0, sp, a0
948; CHECK-NEXT:    addi a0, a0, 16
949; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
950; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v24, v0.t
951; CHECK-NEXT:    csrr a0, vlenb
952; CHECK-NEXT:    slli a0, a0, 3
953; CHECK-NEXT:    add a0, sp, a0
954; CHECK-NEXT:    addi a0, a0, 16
955; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
956; CHECK-NEXT:    csrr a0, vlenb
957; CHECK-NEXT:    slli a0, a0, 4
958; CHECK-NEXT:    add a0, sp, a0
959; CHECK-NEXT:    addi a0, a0, 16
960; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
961; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
962; CHECK-NEXT:    vfmadd.vv v8, v16, v24, v0.t
963; CHECK-NEXT:    vmv.v.v v16, v8
964; CHECK-NEXT:    addi a0, sp, 16
965; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
966; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
967; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
968; CHECK-NEXT:    csrr a0, vlenb
969; CHECK-NEXT:    slli a0, a0, 3
970; CHECK-NEXT:    mv a1, a0
971; CHECK-NEXT:    slli a0, a0, 2
972; CHECK-NEXT:    add a0, a0, a1
973; CHECK-NEXT:    add sp, sp, a0
974; CHECK-NEXT:    .cfi_def_cfa sp, 16
975; CHECK-NEXT:    addi sp, sp, 16
976; CHECK-NEXT:    .cfi_def_cfa_offset 0
977; CHECK-NEXT:    ret
978  %elt.head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0
979  %vb = shufflevector <vscale x 32 x bfloat> %elt.head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer
980  %v = call <vscale x 32 x bfloat> @llvm.vp.fma.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb, <vscale x 32 x bfloat> %vc, <vscale x 32 x i1> %m, i32 %evl)
981  ret <vscale x 32 x bfloat> %v
982}
983
984define <vscale x 32 x bfloat> @vfma_vf_nxv32bf16_commute(<vscale x 32 x bfloat> %va, bfloat %b, <vscale x 32 x bfloat> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
985; CHECK-LABEL: vfma_vf_nxv32bf16_commute:
986; CHECK:       # %bb.0:
987; CHECK-NEXT:    addi sp, sp, -16
988; CHECK-NEXT:    .cfi_def_cfa_offset 16
989; CHECK-NEXT:    csrr a1, vlenb
990; CHECK-NEXT:    slli a1, a1, 3
991; CHECK-NEXT:    mv a2, a1
992; CHECK-NEXT:    slli a1, a1, 2
993; CHECK-NEXT:    add a1, a1, a2
994; CHECK-NEXT:    sub sp, sp, a1
995; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
996; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
997; CHECK-NEXT:    vmv1r.v v7, v0
998; CHECK-NEXT:    fmv.x.h a1, fa0
999; CHECK-NEXT:    csrr a2, vlenb
1000; CHECK-NEXT:    vmv.v.x v24, a1
1001; CHECK-NEXT:    csrr a1, vlenb
1002; CHECK-NEXT:    slli a1, a1, 5
1003; CHECK-NEXT:    add a1, sp, a1
1004; CHECK-NEXT:    addi a1, a1, 16
1005; CHECK-NEXT:    vs8r.v v24, (a1) # Unknown-size Folded Spill
1006; CHECK-NEXT:    slli a1, a2, 1
1007; CHECK-NEXT:    srli a2, a2, 2
1008; CHECK-NEXT:    sub a3, a0, a1
1009; CHECK-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
1010; CHECK-NEXT:    vslidedown.vx v0, v0, a2
1011; CHECK-NEXT:    sltu a2, a0, a3
1012; CHECK-NEXT:    addi a2, a2, -1
1013; CHECK-NEXT:    and a2, a2, a3
1014; CHECK-NEXT:    csrr a3, vlenb
1015; CHECK-NEXT:    slli a3, a3, 4
1016; CHECK-NEXT:    add a3, sp, a3
1017; CHECK-NEXT:    addi a3, a3, 16
1018; CHECK-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
1019; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1020; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v20, v0.t
1021; CHECK-NEXT:    csrr a2, vlenb
1022; CHECK-NEXT:    slli a2, a2, 3
1023; CHECK-NEXT:    add a2, sp, a2
1024; CHECK-NEXT:    addi a2, a2, 16
1025; CHECK-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
1026; CHECK-NEXT:    csrr a2, vlenb
1027; CHECK-NEXT:    slli a2, a2, 5
1028; CHECK-NEXT:    add a2, sp, a2
1029; CHECK-NEXT:    addi a2, a2, 16
1030; CHECK-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
1031; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v28, v0.t
1032; CHECK-NEXT:    vmv4r.v v24, v8
1033; CHECK-NEXT:    csrr a2, vlenb
1034; CHECK-NEXT:    slli a2, a2, 3
1035; CHECK-NEXT:    mv a3, a2
1036; CHECK-NEXT:    slli a2, a2, 1
1037; CHECK-NEXT:    add a2, a2, a3
1038; CHECK-NEXT:    add a2, sp, a2
1039; CHECK-NEXT:    addi a2, a2, 16
1040; CHECK-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
1041; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12, v0.t
1042; CHECK-NEXT:    csrr a2, vlenb
1043; CHECK-NEXT:    slli a2, a2, 3
1044; CHECK-NEXT:    add a2, sp, a2
1045; CHECK-NEXT:    addi a2, a2, 16
1046; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
1047; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1048; CHECK-NEXT:    vfmadd.vv v24, v16, v8, v0.t
1049; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1050; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v24, v0.t
1051; CHECK-NEXT:    addi a2, sp, 16
1052; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1053; CHECK-NEXT:    bltu a0, a1, .LBB33_2
1054; CHECK-NEXT:  # %bb.1:
1055; CHECK-NEXT:    mv a0, a1
1056; CHECK-NEXT:  .LBB33_2:
1057; CHECK-NEXT:    vmv1r.v v0, v7
1058; CHECK-NEXT:    csrr a1, vlenb
1059; CHECK-NEXT:    slli a1, a1, 4
1060; CHECK-NEXT:    add a1, sp, a1
1061; CHECK-NEXT:    addi a1, a1, 16
1062; CHECK-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
1063; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1064; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16, v0.t
1065; CHECK-NEXT:    csrr a0, vlenb
1066; CHECK-NEXT:    slli a0, a0, 3
1067; CHECK-NEXT:    add a0, sp, a0
1068; CHECK-NEXT:    addi a0, a0, 16
1069; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1070; CHECK-NEXT:    csrr a0, vlenb
1071; CHECK-NEXT:    slli a0, a0, 3
1072; CHECK-NEXT:    mv a1, a0
1073; CHECK-NEXT:    slli a0, a0, 1
1074; CHECK-NEXT:    add a0, a0, a1
1075; CHECK-NEXT:    add a0, sp, a0
1076; CHECK-NEXT:    addi a0, a0, 16
1077; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1078; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v16, v0.t
1079; CHECK-NEXT:    csrr a0, vlenb
1080; CHECK-NEXT:    slli a0, a0, 5
1081; CHECK-NEXT:    add a0, sp, a0
1082; CHECK-NEXT:    addi a0, a0, 16
1083; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1084; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16, v0.t
1085; CHECK-NEXT:    csrr a0, vlenb
1086; CHECK-NEXT:    slli a0, a0, 3
1087; CHECK-NEXT:    mv a1, a0
1088; CHECK-NEXT:    slli a0, a0, 1
1089; CHECK-NEXT:    add a0, a0, a1
1090; CHECK-NEXT:    add a0, sp, a0
1091; CHECK-NEXT:    addi a0, a0, 16
1092; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1093; CHECK-NEXT:    csrr a0, vlenb
1094; CHECK-NEXT:    slli a0, a0, 3
1095; CHECK-NEXT:    add a0, sp, a0
1096; CHECK-NEXT:    addi a0, a0, 16
1097; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1098; CHECK-NEXT:    csrr a0, vlenb
1099; CHECK-NEXT:    slli a0, a0, 3
1100; CHECK-NEXT:    mv a1, a0
1101; CHECK-NEXT:    slli a0, a0, 1
1102; CHECK-NEXT:    add a0, a0, a1
1103; CHECK-NEXT:    add a0, sp, a0
1104; CHECK-NEXT:    addi a0, a0, 16
1105; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1106; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1107; CHECK-NEXT:    vfmadd.vv v8, v24, v16, v0.t
1108; CHECK-NEXT:    vmv.v.v v16, v8
1109; CHECK-NEXT:    addi a0, sp, 16
1110; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1111; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1112; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16, v0.t
1113; CHECK-NEXT:    csrr a0, vlenb
1114; CHECK-NEXT:    slli a0, a0, 3
1115; CHECK-NEXT:    mv a1, a0
1116; CHECK-NEXT:    slli a0, a0, 2
1117; CHECK-NEXT:    add a0, a0, a1
1118; CHECK-NEXT:    add sp, sp, a0
1119; CHECK-NEXT:    .cfi_def_cfa sp, 16
1120; CHECK-NEXT:    addi sp, sp, 16
1121; CHECK-NEXT:    .cfi_def_cfa_offset 0
1122; CHECK-NEXT:    ret
1123  %elt.head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0
1124  %vb = shufflevector <vscale x 32 x bfloat> %elt.head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer
1125  %v = call <vscale x 32 x bfloat> @llvm.vp.fma.nxv32bf16(<vscale x 32 x bfloat> %vb, <vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vc, <vscale x 32 x i1> %m, i32 %evl)
1126  ret <vscale x 32 x bfloat> %v
1127}
1128
1129define <vscale x 32 x bfloat> @vfma_vf_nxv32bf16_unmasked(<vscale x 32 x bfloat> %va, bfloat %b, <vscale x 32 x bfloat> %vc, i32 zeroext %evl) {
1130; CHECK-LABEL: vfma_vf_nxv32bf16_unmasked:
1131; CHECK:       # %bb.0:
1132; CHECK-NEXT:    addi sp, sp, -16
1133; CHECK-NEXT:    .cfi_def_cfa_offset 16
1134; CHECK-NEXT:    csrr a1, vlenb
1135; CHECK-NEXT:    slli a1, a1, 5
1136; CHECK-NEXT:    sub sp, sp, a1
1137; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
1138; CHECK-NEXT:    fmv.x.h a2, fa0
1139; CHECK-NEXT:    csrr a3, vlenb
1140; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
1141; CHECK-NEXT:    vmset.m v24
1142; CHECK-NEXT:    slli a1, a3, 1
1143; CHECK-NEXT:    srli a3, a3, 2
1144; CHECK-NEXT:    sub a4, a0, a1
1145; CHECK-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
1146; CHECK-NEXT:    vslidedown.vx v0, v24, a3
1147; CHECK-NEXT:    sltu a3, a0, a4
1148; CHECK-NEXT:    addi a3, a3, -1
1149; CHECK-NEXT:    and a3, a3, a4
1150; CHECK-NEXT:    csrr a4, vlenb
1151; CHECK-NEXT:    slli a4, a4, 4
1152; CHECK-NEXT:    add a4, sp, a4
1153; CHECK-NEXT:    addi a4, a4, 16
1154; CHECK-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1155; CHECK-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
1156; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v20, v0.t
1157; CHECK-NEXT:    addi a4, sp, 16
1158; CHECK-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
1159; CHECK-NEXT:    csrr a4, vlenb
1160; CHECK-NEXT:    slli a4, a4, 3
1161; CHECK-NEXT:    add a4, sp, a4
1162; CHECK-NEXT:    addi a4, a4, 16
1163; CHECK-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
1164; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12, v0.t
1165; CHECK-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
1166; CHECK-NEXT:    vmv.v.x v8, a2
1167; CHECK-NEXT:    csrr a2, vlenb
1168; CHECK-NEXT:    slli a2, a2, 3
1169; CHECK-NEXT:    mv a4, a2
1170; CHECK-NEXT:    slli a2, a2, 1
1171; CHECK-NEXT:    add a2, a2, a4
1172; CHECK-NEXT:    add a2, sp, a2
1173; CHECK-NEXT:    addi a2, a2, 16
1174; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1175; CHECK-NEXT:    csrr a2, vlenb
1176; CHECK-NEXT:    slli a2, a2, 3
1177; CHECK-NEXT:    mv a4, a2
1178; CHECK-NEXT:    slli a2, a2, 1
1179; CHECK-NEXT:    add a2, a2, a4
1180; CHECK-NEXT:    add a2, sp, a2
1181; CHECK-NEXT:    addi a2, a2, 16
1182; CHECK-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
1183; CHECK-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
1184; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v28, v0.t
1185; CHECK-NEXT:    addi a2, sp, 16
1186; CHECK-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
1187; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1188; CHECK-NEXT:    vfmadd.vv v8, v16, v24, v0.t
1189; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1190; CHECK-NEXT:    vfncvtbf16.f.f.w v20, v8, v0.t
1191; CHECK-NEXT:    bltu a0, a1, .LBB34_2
1192; CHECK-NEXT:  # %bb.1:
1193; CHECK-NEXT:    mv a0, a1
1194; CHECK-NEXT:  .LBB34_2:
1195; CHECK-NEXT:    csrr a1, vlenb
1196; CHECK-NEXT:    slli a1, a1, 4
1197; CHECK-NEXT:    add a1, sp, a1
1198; CHECK-NEXT:    addi a1, a1, 16
1199; CHECK-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
1200; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1201; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v24
1202; CHECK-NEXT:    addi a0, sp, 16
1203; CHECK-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
1204; CHECK-NEXT:    csrr a0, vlenb
1205; CHECK-NEXT:    slli a0, a0, 3
1206; CHECK-NEXT:    add a0, sp, a0
1207; CHECK-NEXT:    addi a0, a0, 16
1208; CHECK-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
1209; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v0
1210; CHECK-NEXT:    csrr a0, vlenb
1211; CHECK-NEXT:    slli a0, a0, 3
1212; CHECK-NEXT:    mv a1, a0
1213; CHECK-NEXT:    slli a0, a0, 1
1214; CHECK-NEXT:    add a0, a0, a1
1215; CHECK-NEXT:    add a0, sp, a0
1216; CHECK-NEXT:    addi a0, a0, 16
1217; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1218; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v8
1219; CHECK-NEXT:    addi a0, sp, 16
1220; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1221; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1222; CHECK-NEXT:    vfmadd.vv v0, v24, v8
1223; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1224; CHECK-NEXT:    vfncvtbf16.f.f.w v16, v0
1225; CHECK-NEXT:    vmv8r.v v8, v16
1226; CHECK-NEXT:    csrr a0, vlenb
1227; CHECK-NEXT:    slli a0, a0, 5
1228; CHECK-NEXT:    add sp, sp, a0
1229; CHECK-NEXT:    .cfi_def_cfa sp, 16
1230; CHECK-NEXT:    addi sp, sp, 16
1231; CHECK-NEXT:    .cfi_def_cfa_offset 0
1232; CHECK-NEXT:    ret
1233  %elt.head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0
1234  %vb = shufflevector <vscale x 32 x bfloat> %elt.head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer
1235  %v = call <vscale x 32 x bfloat> @llvm.vp.fma.nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb, <vscale x 32 x bfloat> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
1236  ret <vscale x 32 x bfloat> %v
1237}
1238
1239define <vscale x 32 x bfloat> @vfma_vf_nxv32bf16_unmasked_commute(<vscale x 32 x bfloat> %va, bfloat %b, <vscale x 32 x bfloat> %vc, i32 zeroext %evl) {
1240; CHECK-LABEL: vfma_vf_nxv32bf16_unmasked_commute:
1241; CHECK:       # %bb.0:
1242; CHECK-NEXT:    addi sp, sp, -16
1243; CHECK-NEXT:    .cfi_def_cfa_offset 16
1244; CHECK-NEXT:    csrr a1, vlenb
1245; CHECK-NEXT:    slli a1, a1, 5
1246; CHECK-NEXT:    sub sp, sp, a1
1247; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
1248; CHECK-NEXT:    csrr a1, vlenb
1249; CHECK-NEXT:    slli a1, a1, 3
1250; CHECK-NEXT:    mv a2, a1
1251; CHECK-NEXT:    slli a1, a1, 1
1252; CHECK-NEXT:    add a1, a1, a2
1253; CHECK-NEXT:    add a1, sp, a1
1254; CHECK-NEXT:    addi a1, a1, 16
1255; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
1256; CHECK-NEXT:    fmv.x.h a1, fa0
1257; CHECK-NEXT:    csrr a2, vlenb
1258; CHECK-NEXT:    vsetvli a3, zero, e16, m8, ta, ma
1259; CHECK-NEXT:    vmset.m v24
1260; CHECK-NEXT:    vmv.v.x v8, a1
1261; CHECK-NEXT:    slli a1, a2, 1
1262; CHECK-NEXT:    srli a2, a2, 2
1263; CHECK-NEXT:    sub a3, a0, a1
1264; CHECK-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
1265; CHECK-NEXT:    vslidedown.vx v0, v24, a2
1266; CHECK-NEXT:    sltu a2, a0, a3
1267; CHECK-NEXT:    addi a2, a2, -1
1268; CHECK-NEXT:    and a2, a2, a3
1269; CHECK-NEXT:    csrr a3, vlenb
1270; CHECK-NEXT:    slli a3, a3, 4
1271; CHECK-NEXT:    add a3, sp, a3
1272; CHECK-NEXT:    addi a3, a3, 16
1273; CHECK-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
1274; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1275; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v20, v0.t
1276; CHECK-NEXT:    addi a2, sp, 16
1277; CHECK-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
1278; CHECK-NEXT:    csrr a2, vlenb
1279; CHECK-NEXT:    slli a2, a2, 3
1280; CHECK-NEXT:    add a2, sp, a2
1281; CHECK-NEXT:    addi a2, a2, 16
1282; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1283; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12, v0.t
1284; CHECK-NEXT:    csrr a2, vlenb
1285; CHECK-NEXT:    slli a2, a2, 3
1286; CHECK-NEXT:    mv a3, a2
1287; CHECK-NEXT:    slli a2, a2, 1
1288; CHECK-NEXT:    add a2, a2, a3
1289; CHECK-NEXT:    add a2, sp, a2
1290; CHECK-NEXT:    addi a2, a2, 16
1291; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
1292; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v20, v0.t
1293; CHECK-NEXT:    addi a2, sp, 16
1294; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
1295; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1296; CHECK-NEXT:    vfmadd.vv v8, v24, v16, v0.t
1297; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1298; CHECK-NEXT:    vfncvtbf16.f.f.w v20, v8, v0.t
1299; CHECK-NEXT:    bltu a0, a1, .LBB35_2
1300; CHECK-NEXT:  # %bb.1:
1301; CHECK-NEXT:    mv a0, a1
1302; CHECK-NEXT:  .LBB35_2:
1303; CHECK-NEXT:    csrr a1, vlenb
1304; CHECK-NEXT:    slli a1, a1, 4
1305; CHECK-NEXT:    add a1, sp, a1
1306; CHECK-NEXT:    addi a1, a1, 16
1307; CHECK-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
1308; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1309; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v24
1310; CHECK-NEXT:    addi a0, sp, 16
1311; CHECK-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
1312; CHECK-NEXT:    csrr a0, vlenb
1313; CHECK-NEXT:    slli a0, a0, 3
1314; CHECK-NEXT:    mv a1, a0
1315; CHECK-NEXT:    slli a0, a0, 1
1316; CHECK-NEXT:    add a0, a0, a1
1317; CHECK-NEXT:    add a0, sp, a0
1318; CHECK-NEXT:    addi a0, a0, 16
1319; CHECK-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
1320; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v0
1321; CHECK-NEXT:    csrr a0, vlenb
1322; CHECK-NEXT:    slli a0, a0, 3
1323; CHECK-NEXT:    add a0, sp, a0
1324; CHECK-NEXT:    addi a0, a0, 16
1325; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1326; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v8
1327; CHECK-NEXT:    addi a0, sp, 16
1328; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1329; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1330; CHECK-NEXT:    vfmadd.vv v0, v24, v8
1331; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1332; CHECK-NEXT:    vfncvtbf16.f.f.w v16, v0
1333; CHECK-NEXT:    vmv8r.v v8, v16
1334; CHECK-NEXT:    csrr a0, vlenb
1335; CHECK-NEXT:    slli a0, a0, 5
1336; CHECK-NEXT:    add sp, sp, a0
1337; CHECK-NEXT:    .cfi_def_cfa sp, 16
1338; CHECK-NEXT:    addi sp, sp, 16
1339; CHECK-NEXT:    .cfi_def_cfa_offset 0
1340; CHECK-NEXT:    ret
1341  %elt.head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0
1342  %vb = shufflevector <vscale x 32 x bfloat> %elt.head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer
1343  %v = call <vscale x 32 x bfloat> @llvm.vp.fma.nxv32bf16(<vscale x 32 x bfloat> %vb, <vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
1344  ret <vscale x 32 x bfloat> %v
1345}
1346
1347declare <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32)
1348
1349define <vscale x 1 x half> @vfma_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1350; ZVFH-LABEL: vfma_vv_nxv1f16:
1351; ZVFH:       # %bb.0:
1352; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1353; ZVFH-NEXT:    vfmadd.vv v9, v8, v10, v0.t
1354; ZVFH-NEXT:    vmv1r.v v8, v9
1355; ZVFH-NEXT:    ret
1356;
1357; ZVFHMIN-LABEL: vfma_vv_nxv1f16:
1358; ZVFHMIN:       # %bb.0:
1359; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1360; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
1361; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
1362; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
1363; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1364; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11, v0.t
1365; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1366; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
1367; ZVFHMIN-NEXT:    ret
1368  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
1369  ret <vscale x 1 x half> %v
1370}
1371
1372define <vscale x 1 x half> @vfma_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) {
1373; ZVFH-LABEL: vfma_vv_nxv1f16_unmasked:
1374; ZVFH:       # %bb.0:
1375; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1376; ZVFH-NEXT:    vfmadd.vv v8, v9, v10
1377; ZVFH-NEXT:    ret
1378;
1379; ZVFHMIN-LABEL: vfma_vv_nxv1f16_unmasked:
1380; ZVFHMIN:       # %bb.0:
1381; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1382; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
1383; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
1384; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
1385; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1386; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11
1387; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1388; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1389; ZVFHMIN-NEXT:    ret
1390  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1391  ret <vscale x 1 x half> %v
1392}
1393
1394define <vscale x 1 x half> @vfma_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1395; ZVFH-LABEL: vfma_vf_nxv1f16:
1396; ZVFH:       # %bb.0:
1397; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1398; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
1399; ZVFH-NEXT:    ret
1400;
1401; ZVFHMIN-LABEL: vfma_vf_nxv1f16:
1402; ZVFHMIN:       # %bb.0:
1403; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1404; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1405; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
1406; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1407; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
1408; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
1409; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1410; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10, v0.t
1411; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1412; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
1413; ZVFHMIN-NEXT:    ret
1414  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1415  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1416  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
1417  ret <vscale x 1 x half> %v
1418}
1419
1420define <vscale x 1 x half> @vfma_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1421; ZVFH-LABEL: vfma_vf_nxv1f16_commute:
1422; ZVFH:       # %bb.0:
1423; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1424; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
1425; ZVFH-NEXT:    ret
1426;
1427; ZVFHMIN-LABEL: vfma_vf_nxv1f16_commute:
1428; ZVFHMIN:       # %bb.0:
1429; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1430; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1431; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
1432; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1433; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
1434; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
1435; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1436; ZVFHMIN-NEXT:    vfmadd.vv v11, v8, v10, v0.t
1437; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1438; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v11, v0.t
1439; ZVFHMIN-NEXT:    ret
1440  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1441  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1442  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
1443  ret <vscale x 1 x half> %v
1444}
1445
1446define <vscale x 1 x half> @vfma_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
1447; ZVFH-LABEL: vfma_vf_nxv1f16_unmasked:
1448; ZVFH:       # %bb.0:
1449; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1450; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9
1451; ZVFH-NEXT:    ret
1452;
1453; ZVFHMIN-LABEL: vfma_vf_nxv1f16_unmasked:
1454; ZVFHMIN:       # %bb.0:
1455; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1456; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1457; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1458; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1459; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
1460; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
1461; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1462; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10
1463; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1464; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1465; ZVFHMIN-NEXT:    ret
1466  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1467  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1468  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1469  ret <vscale x 1 x half> %v
1470}
1471
1472define <vscale x 1 x half> @vfma_vf_nxv1f16_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
1473; ZVFH-LABEL: vfma_vf_nxv1f16_unmasked_commute:
1474; ZVFH:       # %bb.0:
1475; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1476; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9
1477; ZVFH-NEXT:    ret
1478;
1479; ZVFHMIN-LABEL: vfma_vf_nxv1f16_unmasked_commute:
1480; ZVFHMIN:       # %bb.0:
1481; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1482; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1483; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1484; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1485; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
1486; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
1487; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
1488; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10
1489; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
1490; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1491; ZVFHMIN-NEXT:    ret
1492  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1493  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1494  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1495  ret <vscale x 1 x half> %v
1496}
1497
1498declare <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32)
1499
1500define <vscale x 2 x half> @vfma_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1501; ZVFH-LABEL: vfma_vv_nxv2f16:
1502; ZVFH:       # %bb.0:
1503; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1504; ZVFH-NEXT:    vfmadd.vv v9, v8, v10, v0.t
1505; ZVFH-NEXT:    vmv1r.v v8, v9
1506; ZVFH-NEXT:    ret
1507;
1508; ZVFHMIN-LABEL: vfma_vv_nxv2f16:
1509; ZVFHMIN:       # %bb.0:
1510; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1511; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
1512; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
1513; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
1514; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
1515; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11, v0.t
1516; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1517; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
1518; ZVFHMIN-NEXT:    ret
1519  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl)
1520  ret <vscale x 2 x half> %v
1521}
1522
1523define <vscale x 2 x half> @vfma_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) {
1524; ZVFH-LABEL: vfma_vv_nxv2f16_unmasked:
1525; ZVFH:       # %bb.0:
1526; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1527; ZVFH-NEXT:    vfmadd.vv v8, v9, v10
1528; ZVFH-NEXT:    ret
1529;
1530; ZVFHMIN-LABEL: vfma_vv_nxv2f16_unmasked:
1531; ZVFHMIN:       # %bb.0:
1532; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1533; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
1534; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
1535; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
1536; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
1537; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11
1538; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1539; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1540; ZVFHMIN-NEXT:    ret
1541  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1542  ret <vscale x 2 x half> %v
1543}
1544
1545define <vscale x 2 x half> @vfma_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1546; ZVFH-LABEL: vfma_vf_nxv2f16:
1547; ZVFH:       # %bb.0:
1548; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1549; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
1550; ZVFH-NEXT:    ret
1551;
1552; ZVFHMIN-LABEL: vfma_vf_nxv2f16:
1553; ZVFHMIN:       # %bb.0:
1554; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1555; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1556; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
1557; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1558; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
1559; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
1560; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
1561; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10, v0.t
1562; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1563; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
1564; ZVFHMIN-NEXT:    ret
1565  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1566  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1567  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
1568  ret <vscale x 2 x half> %v
1569}
1570
1571define <vscale x 2 x half> @vfma_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1572; ZVFH-LABEL: vfma_vf_nxv2f16_commute:
1573; ZVFH:       # %bb.0:
1574; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1575; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
1576; ZVFH-NEXT:    ret
1577;
1578; ZVFHMIN-LABEL: vfma_vf_nxv2f16_commute:
1579; ZVFHMIN:       # %bb.0:
1580; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1581; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1582; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
1583; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1584; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
1585; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
1586; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
1587; ZVFHMIN-NEXT:    vfmadd.vv v11, v8, v10, v0.t
1588; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1589; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v11, v0.t
1590; ZVFHMIN-NEXT:    ret
1591  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1592  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1593  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
1594  ret <vscale x 2 x half> %v
1595}
1596
1597define <vscale x 2 x half> @vfma_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
1598; ZVFH-LABEL: vfma_vf_nxv2f16_unmasked:
1599; ZVFH:       # %bb.0:
1600; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1601; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9
1602; ZVFH-NEXT:    ret
1603;
1604; ZVFHMIN-LABEL: vfma_vf_nxv2f16_unmasked:
1605; ZVFHMIN:       # %bb.0:
1606; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1607; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1608; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1609; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1610; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
1611; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
1612; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
1613; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10
1614; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1615; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1616; ZVFHMIN-NEXT:    ret
1617  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1618  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1619  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1620  ret <vscale x 2 x half> %v
1621}
1622
1623define <vscale x 2 x half> @vfma_vf_nxv2f16_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
1624; ZVFH-LABEL: vfma_vf_nxv2f16_unmasked_commute:
1625; ZVFH:       # %bb.0:
1626; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1627; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9
1628; ZVFH-NEXT:    ret
1629;
1630; ZVFHMIN-LABEL: vfma_vf_nxv2f16_unmasked_commute:
1631; ZVFHMIN:       # %bb.0:
1632; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1633; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1634; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1635; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1636; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
1637; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
1638; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
1639; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10
1640; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1641; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
1642; ZVFHMIN-NEXT:    ret
1643  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1644  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1645  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1646  ret <vscale x 2 x half> %v
1647}
1648
1649declare <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32)
1650
1651define <vscale x 4 x half> @vfma_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1652; ZVFH-LABEL: vfma_vv_nxv4f16:
1653; ZVFH:       # %bb.0:
1654; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1655; ZVFH-NEXT:    vfmadd.vv v9, v8, v10, v0.t
1656; ZVFH-NEXT:    vmv.v.v v8, v9
1657; ZVFH-NEXT:    ret
1658;
1659; ZVFHMIN-LABEL: vfma_vv_nxv4f16:
1660; ZVFHMIN:       # %bb.0:
1661; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1662; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
1663; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
1664; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t
1665; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1666; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12, v0.t
1667; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1668; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
1669; ZVFHMIN-NEXT:    ret
1670  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl)
1671  ret <vscale x 4 x half> %v
1672}
1673
1674define <vscale x 4 x half> @vfma_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) {
1675; ZVFH-LABEL: vfma_vv_nxv4f16_unmasked:
1676; ZVFH:       # %bb.0:
1677; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1678; ZVFH-NEXT:    vfmadd.vv v8, v9, v10
1679; ZVFH-NEXT:    ret
1680;
1681; ZVFHMIN-LABEL: vfma_vv_nxv4f16_unmasked:
1682; ZVFHMIN:       # %bb.0:
1683; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1684; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1685; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
1686; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9
1687; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1688; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12
1689; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1690; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
1691; ZVFHMIN-NEXT:    ret
1692  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1693  ret <vscale x 4 x half> %v
1694}
1695
1696define <vscale x 4 x half> @vfma_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1697; ZVFH-LABEL: vfma_vf_nxv4f16:
1698; ZVFH:       # %bb.0:
1699; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1700; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
1701; ZVFH-NEXT:    ret
1702;
1703; ZVFHMIN-LABEL: vfma_vf_nxv4f16:
1704; ZVFHMIN:       # %bb.0:
1705; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1706; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1707; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
1708; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1709; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
1710; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t
1711; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1712; ZVFHMIN-NEXT:    vfmadd.vv v14, v12, v10, v0.t
1713; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1714; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
1715; ZVFHMIN-NEXT:    ret
1716  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
1717  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1718  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
1719  ret <vscale x 4 x half> %v
1720}
1721
1722define <vscale x 4 x half> @vfma_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1723; ZVFH-LABEL: vfma_vf_nxv4f16_commute:
1724; ZVFH:       # %bb.0:
1725; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1726; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
1727; ZVFH-NEXT:    ret
1728;
1729; ZVFHMIN-LABEL: vfma_vf_nxv4f16_commute:
1730; ZVFHMIN:       # %bb.0:
1731; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1732; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1733; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
1734; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1735; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
1736; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t
1737; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1738; ZVFHMIN-NEXT:    vfmadd.vv v12, v14, v10, v0.t
1739; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1740; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
1741; ZVFHMIN-NEXT:    ret
1742  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
1743  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1744  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
1745  ret <vscale x 4 x half> %v
1746}
1747
1748define <vscale x 4 x half> @vfma_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
1749; ZVFH-LABEL: vfma_vf_nxv4f16_unmasked:
1750; ZVFH:       # %bb.0:
1751; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1752; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9
1753; ZVFH-NEXT:    ret
1754;
1755; ZVFHMIN-LABEL: vfma_vf_nxv4f16_unmasked:
1756; ZVFHMIN:       # %bb.0:
1757; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1758; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1759; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1760; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1761; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1762; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9
1763; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1764; ZVFHMIN-NEXT:    vfmadd.vv v14, v12, v10
1765; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1766; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
1767; ZVFHMIN-NEXT:    ret
1768  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
1769  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1770  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1771  ret <vscale x 4 x half> %v
1772}
1773
1774define <vscale x 4 x half> @vfma_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
1775; ZVFH-LABEL: vfma_vf_nxv4f16_unmasked_commute:
1776; ZVFH:       # %bb.0:
1777; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1778; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9
1779; ZVFH-NEXT:    ret
1780;
1781; ZVFHMIN-LABEL: vfma_vf_nxv4f16_unmasked_commute:
1782; ZVFHMIN:       # %bb.0:
1783; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1784; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1785; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1786; ZVFHMIN-NEXT:    vmv.v.x v9, a1
1787; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1788; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9
1789; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
1790; ZVFHMIN-NEXT:    vfmadd.vv v14, v12, v10
1791; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1792; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
1793; ZVFHMIN-NEXT:    ret
1794  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
1795  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
1796  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1797  ret <vscale x 4 x half> %v
1798}
1799
1800declare <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32)
1801
1802define <vscale x 8 x half> @vfma_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1803; ZVFH-LABEL: vfma_vv_nxv8f16:
1804; ZVFH:       # %bb.0:
1805; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1806; ZVFH-NEXT:    vfmadd.vv v10, v8, v12, v0.t
1807; ZVFH-NEXT:    vmv.v.v v8, v10
1808; ZVFH-NEXT:    ret
1809;
1810; ZVFHMIN-LABEL: vfma_vv_nxv8f16:
1811; ZVFHMIN:       # %bb.0:
1812; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1813; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
1814; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
1815; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t
1816; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1817; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16, v0.t
1818; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1819; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
1820; ZVFHMIN-NEXT:    ret
1821  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl)
1822  ret <vscale x 8 x half> %v
1823}
1824
1825define <vscale x 8 x half> @vfma_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) {
1826; ZVFH-LABEL: vfma_vv_nxv8f16_unmasked:
1827; ZVFH:       # %bb.0:
1828; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1829; ZVFH-NEXT:    vfmadd.vv v8, v10, v12
1830; ZVFH-NEXT:    ret
1831;
1832; ZVFHMIN-LABEL: vfma_vv_nxv8f16_unmasked:
1833; ZVFHMIN:       # %bb.0:
1834; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1835; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
1836; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1837; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10
1838; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1839; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16
1840; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1841; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
1842; ZVFHMIN-NEXT:    ret
1843  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1844  ret <vscale x 8 x half> %v
1845}
1846
1847define <vscale x 8 x half> @vfma_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1848; ZVFH-LABEL: vfma_vf_nxv8f16:
1849; ZVFH:       # %bb.0:
1850; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1851; ZVFH-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
1852; ZVFH-NEXT:    ret
1853;
1854; ZVFHMIN-LABEL: vfma_vf_nxv8f16:
1855; ZVFHMIN:       # %bb.0:
1856; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1857; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1858; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
1859; ZVFHMIN-NEXT:    vmv.v.x v10, a1
1860; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
1861; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t
1862; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1863; ZVFHMIN-NEXT:    vfmadd.vv v20, v16, v12, v0.t
1864; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1865; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
1866; ZVFHMIN-NEXT:    ret
1867  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1868  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1869  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
1870  ret <vscale x 8 x half> %v
1871}
1872
1873define <vscale x 8 x half> @vfma_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1874; ZVFH-LABEL: vfma_vf_nxv8f16_commute:
1875; ZVFH:       # %bb.0:
1876; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1877; ZVFH-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
1878; ZVFH-NEXT:    ret
1879;
1880; ZVFHMIN-LABEL: vfma_vf_nxv8f16_commute:
1881; ZVFHMIN:       # %bb.0:
1882; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1883; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1884; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
1885; ZVFHMIN-NEXT:    vmv.v.x v10, a1
1886; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
1887; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t
1888; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1889; ZVFHMIN-NEXT:    vfmadd.vv v16, v20, v12, v0.t
1890; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1891; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
1892; ZVFHMIN-NEXT:    ret
1893  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1894  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1895  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
1896  ret <vscale x 8 x half> %v
1897}
1898
1899define <vscale x 8 x half> @vfma_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
1900; ZVFH-LABEL: vfma_vf_nxv8f16_unmasked:
1901; ZVFH:       # %bb.0:
1902; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1903; ZVFH-NEXT:    vfmadd.vf v8, fa0, v10
1904; ZVFH-NEXT:    ret
1905;
1906; ZVFHMIN-LABEL: vfma_vf_nxv8f16_unmasked:
1907; ZVFHMIN:       # %bb.0:
1908; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1909; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1910; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1911; ZVFHMIN-NEXT:    vmv.v.x v10, a1
1912; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1913; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10
1914; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1915; ZVFHMIN-NEXT:    vfmadd.vv v20, v16, v12
1916; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1917; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
1918; ZVFHMIN-NEXT:    ret
1919  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1920  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1921  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1922  ret <vscale x 8 x half> %v
1923}
1924
1925define <vscale x 8 x half> @vfma_vf_nxv8f16_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
1926; ZVFH-LABEL: vfma_vf_nxv8f16_unmasked_commute:
1927; ZVFH:       # %bb.0:
1928; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1929; ZVFH-NEXT:    vfmadd.vf v8, fa0, v10
1930; ZVFH-NEXT:    ret
1931;
1932; ZVFHMIN-LABEL: vfma_vf_nxv8f16_unmasked_commute:
1933; ZVFHMIN:       # %bb.0:
1934; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
1935; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1936; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1937; ZVFHMIN-NEXT:    vmv.v.x v10, a1
1938; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1939; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10
1940; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1941; ZVFHMIN-NEXT:    vfmadd.vv v20, v16, v12
1942; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1943; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
1944; ZVFHMIN-NEXT:    ret
1945  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1946  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1947  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1948  ret <vscale x 8 x half> %v
1949}
1950
1951declare <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32)
1952
1953define <vscale x 16 x half> @vfma_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1954; ZVFH-LABEL: vfma_vv_nxv16f16:
1955; ZVFH:       # %bb.0:
1956; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1957; ZVFH-NEXT:    vfmadd.vv v12, v8, v16, v0.t
1958; ZVFH-NEXT:    vmv.v.v v8, v12
1959; ZVFH-NEXT:    ret
1960;
1961; ZVFHMIN-LABEL: vfma_vv_nxv16f16:
1962; ZVFHMIN:       # %bb.0:
1963; ZVFHMIN-NEXT:    addi sp, sp, -16
1964; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
1965; ZVFHMIN-NEXT:    csrr a1, vlenb
1966; ZVFHMIN-NEXT:    slli a1, a1, 3
1967; ZVFHMIN-NEXT:    sub sp, sp, a1
1968; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1969; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1970; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
1971; ZVFHMIN-NEXT:    addi a0, sp, 16
1972; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1973; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
1974; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
1975; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1976; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
1977; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
1978; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
1979; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
1980; ZVFHMIN-NEXT:    csrr a0, vlenb
1981; ZVFHMIN-NEXT:    slli a0, a0, 3
1982; ZVFHMIN-NEXT:    add sp, sp, a0
1983; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
1984; ZVFHMIN-NEXT:    addi sp, sp, 16
1985; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
1986; ZVFHMIN-NEXT:    ret
1987  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl)
1988  ret <vscale x 16 x half> %v
1989}
1990
1991define <vscale x 16 x half> @vfma_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) {
1992; ZVFH-LABEL: vfma_vv_nxv16f16_unmasked:
1993; ZVFH:       # %bb.0:
1994; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1995; ZVFH-NEXT:    vfmadd.vv v8, v12, v16
1996; ZVFH-NEXT:    ret
1997;
1998; ZVFHMIN-LABEL: vfma_vv_nxv16f16_unmasked:
1999; ZVFHMIN:       # %bb.0:
2000; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2001; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
2002; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2003; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v12
2004; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2005; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
2006; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2007; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
2008; ZVFHMIN-NEXT:    ret
2009  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
2010  ret <vscale x 16 x half> %v
2011}
2012
2013define <vscale x 16 x half> @vfma_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
2014; ZVFH-LABEL: vfma_vf_nxv16f16:
2015; ZVFH:       # %bb.0:
2016; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2017; ZVFH-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
2018; ZVFH-NEXT:    ret
2019;
2020; ZVFHMIN-LABEL: vfma_vf_nxv16f16:
2021; ZVFHMIN:       # %bb.0:
2022; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2023; ZVFHMIN-NEXT:    vmv4r.v v16, v8
2024; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2025; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
2026; ZVFHMIN-NEXT:    vmv8r.v v8, v24
2027; ZVFHMIN-NEXT:    vmv.v.x v4, a0
2028; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
2029; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v4, v0.t
2030; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2031; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
2032; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2033; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
2034; ZVFHMIN-NEXT:    ret
2035  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2036  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2037  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
2038  ret <vscale x 16 x half> %v
2039}
2040
2041define <vscale x 16 x half> @vfma_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
2042; ZVFH-LABEL: vfma_vf_nxv16f16_commute:
2043; ZVFH:       # %bb.0:
2044; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2045; ZVFH-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
2046; ZVFH-NEXT:    ret
2047;
2048; ZVFHMIN-LABEL: vfma_vf_nxv16f16_commute:
2049; ZVFHMIN:       # %bb.0:
2050; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
2051; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2052; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
2053; ZVFHMIN-NEXT:    vmv.v.x v4, a1
2054; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
2055; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
2056; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2057; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
2058; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2059; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
2060; ZVFHMIN-NEXT:    ret
2061  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2062  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2063  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
2064  ret <vscale x 16 x half> %v
2065}
2066
2067define <vscale x 16 x half> @vfma_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
2068; ZVFH-LABEL: vfma_vf_nxv16f16_unmasked:
2069; ZVFH:       # %bb.0:
2070; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2071; ZVFH-NEXT:    vfmadd.vf v8, fa0, v12
2072; ZVFH-NEXT:    ret
2073;
2074; ZVFHMIN-LABEL: vfma_vf_nxv16f16_unmasked:
2075; ZVFHMIN:       # %bb.0:
2076; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
2077; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2078; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
2079; ZVFHMIN-NEXT:    vmv.v.x v12, a1
2080; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
2081; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v12
2082; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2083; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v16
2084; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2085; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
2086; ZVFHMIN-NEXT:    ret
2087  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2088  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2089  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
2090  ret <vscale x 16 x half> %v
2091}
2092
2093define <vscale x 16 x half> @vfma_vf_nxv16f16_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
2094; ZVFH-LABEL: vfma_vf_nxv16f16_unmasked_commute:
2095; ZVFH:       # %bb.0:
2096; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2097; ZVFH-NEXT:    vfmadd.vf v8, fa0, v12
2098; ZVFH-NEXT:    ret
2099;
2100; ZVFHMIN-LABEL: vfma_vf_nxv16f16_unmasked_commute:
2101; ZVFHMIN:       # %bb.0:
2102; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
2103; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2104; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
2105; ZVFHMIN-NEXT:    vmv.v.x v12, a1
2106; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
2107; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v12
2108; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2109; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v16
2110; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2111; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
2112; ZVFHMIN-NEXT:    ret
2113  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2114  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2115  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
2116  ret <vscale x 16 x half> %v
2117}
2118
2119declare <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32)
2120
2121define <vscale x 32 x half> @vfma_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
2122; ZVFH-LABEL: vfma_vv_nxv32f16:
2123; ZVFH:       # %bb.0:
2124; ZVFH-NEXT:    vl8re16.v v24, (a0)
2125; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
2126; ZVFH-NEXT:    vfmadd.vv v16, v8, v24, v0.t
2127; ZVFH-NEXT:    vmv.v.v v8, v16
2128; ZVFH-NEXT:    ret
2129;
2130; ZVFHMIN-LABEL: vfma_vv_nxv32f16:
2131; ZVFHMIN:       # %bb.0:
2132; ZVFHMIN-NEXT:    addi sp, sp, -16
2133; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
2134; ZVFHMIN-NEXT:    csrr a2, vlenb
2135; ZVFHMIN-NEXT:    slli a2, a2, 3
2136; ZVFHMIN-NEXT:    mv a3, a2
2137; ZVFHMIN-NEXT:    slli a2, a2, 2
2138; ZVFHMIN-NEXT:    add a2, a2, a3
2139; ZVFHMIN-NEXT:    sub sp, sp, a2
2140; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
2141; ZVFHMIN-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
2142; ZVFHMIN-NEXT:    vmv1r.v v7, v0
2143; ZVFHMIN-NEXT:    csrr a2, vlenb
2144; ZVFHMIN-NEXT:    slli a2, a2, 5
2145; ZVFHMIN-NEXT:    add a2, sp, a2
2146; ZVFHMIN-NEXT:    addi a2, a2, 16
2147; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
2148; ZVFHMIN-NEXT:    vmv8r.v v24, v8
2149; ZVFHMIN-NEXT:    vl8re16.v v8, (a0)
2150; ZVFHMIN-NEXT:    csrr a2, vlenb
2151; ZVFHMIN-NEXT:    slli a0, a2, 1
2152; ZVFHMIN-NEXT:    srli a2, a2, 2
2153; ZVFHMIN-NEXT:    sub a3, a1, a0
2154; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
2155; ZVFHMIN-NEXT:    sltu a2, a1, a3
2156; ZVFHMIN-NEXT:    addi a2, a2, -1
2157; ZVFHMIN-NEXT:    and a2, a2, a3
2158; ZVFHMIN-NEXT:    csrr a3, vlenb
2159; ZVFHMIN-NEXT:    slli a3, a3, 4
2160; ZVFHMIN-NEXT:    add a3, sp, a3
2161; ZVFHMIN-NEXT:    addi a3, a3, 16
2162; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
2163; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
2164; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
2165; ZVFHMIN-NEXT:    csrr a2, vlenb
2166; ZVFHMIN-NEXT:    slli a2, a2, 3
2167; ZVFHMIN-NEXT:    add a2, sp, a2
2168; ZVFHMIN-NEXT:    addi a2, a2, 16
2169; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
2170; ZVFHMIN-NEXT:    csrr a2, vlenb
2171; ZVFHMIN-NEXT:    slli a2, a2, 3
2172; ZVFHMIN-NEXT:    mv a3, a2
2173; ZVFHMIN-NEXT:    slli a2, a2, 1
2174; ZVFHMIN-NEXT:    add a2, a2, a3
2175; ZVFHMIN-NEXT:    add a2, sp, a2
2176; ZVFHMIN-NEXT:    addi a2, a2, 16
2177; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
2178; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
2179; ZVFHMIN-NEXT:    csrr a2, vlenb
2180; ZVFHMIN-NEXT:    slli a2, a2, 5
2181; ZVFHMIN-NEXT:    add a2, sp, a2
2182; ZVFHMIN-NEXT:    addi a2, a2, 16
2183; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
2184; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
2185; ZVFHMIN-NEXT:    csrr a2, vlenb
2186; ZVFHMIN-NEXT:    slli a2, a2, 3
2187; ZVFHMIN-NEXT:    add a2, sp, a2
2188; ZVFHMIN-NEXT:    addi a2, a2, 16
2189; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
2190; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2191; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
2192; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2193; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
2194; ZVFHMIN-NEXT:    addi a2, sp, 16
2195; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
2196; ZVFHMIN-NEXT:    bltu a1, a0, .LBB66_2
2197; ZVFHMIN-NEXT:  # %bb.1:
2198; ZVFHMIN-NEXT:    mv a1, a0
2199; ZVFHMIN-NEXT:  .LBB66_2:
2200; ZVFHMIN-NEXT:    vmv1r.v v0, v7
2201; ZVFHMIN-NEXT:    csrr a0, vlenb
2202; ZVFHMIN-NEXT:    slli a0, a0, 4
2203; ZVFHMIN-NEXT:    add a0, sp, a0
2204; ZVFHMIN-NEXT:    addi a0, a0, 16
2205; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2206; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
2207; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
2208; ZVFHMIN-NEXT:    csrr a0, vlenb
2209; ZVFHMIN-NEXT:    slli a0, a0, 3
2210; ZVFHMIN-NEXT:    add a0, sp, a0
2211; ZVFHMIN-NEXT:    addi a0, a0, 16
2212; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
2213; ZVFHMIN-NEXT:    csrr a0, vlenb
2214; ZVFHMIN-NEXT:    slli a0, a0, 3
2215; ZVFHMIN-NEXT:    mv a1, a0
2216; ZVFHMIN-NEXT:    slli a0, a0, 1
2217; ZVFHMIN-NEXT:    add a0, a0, a1
2218; ZVFHMIN-NEXT:    add a0, sp, a0
2219; ZVFHMIN-NEXT:    addi a0, a0, 16
2220; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2221; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
2222; ZVFHMIN-NEXT:    csrr a0, vlenb
2223; ZVFHMIN-NEXT:    slli a0, a0, 4
2224; ZVFHMIN-NEXT:    add a0, sp, a0
2225; ZVFHMIN-NEXT:    addi a0, a0, 16
2226; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
2227; ZVFHMIN-NEXT:    csrr a0, vlenb
2228; ZVFHMIN-NEXT:    slli a0, a0, 5
2229; ZVFHMIN-NEXT:    add a0, sp, a0
2230; ZVFHMIN-NEXT:    addi a0, a0, 16
2231; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
2232; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
2233; ZVFHMIN-NEXT:    csrr a0, vlenb
2234; ZVFHMIN-NEXT:    slli a0, a0, 3
2235; ZVFHMIN-NEXT:    add a0, sp, a0
2236; ZVFHMIN-NEXT:    addi a0, a0, 16
2237; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
2238; ZVFHMIN-NEXT:    csrr a0, vlenb
2239; ZVFHMIN-NEXT:    slli a0, a0, 4
2240; ZVFHMIN-NEXT:    add a0, sp, a0
2241; ZVFHMIN-NEXT:    addi a0, a0, 16
2242; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
2243; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2244; ZVFHMIN-NEXT:    vfmadd.vv v8, v16, v24, v0.t
2245; ZVFHMIN-NEXT:    vmv.v.v v16, v8
2246; ZVFHMIN-NEXT:    addi a0, sp, 16
2247; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2248; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2249; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
2250; ZVFHMIN-NEXT:    csrr a0, vlenb
2251; ZVFHMIN-NEXT:    slli a0, a0, 3
2252; ZVFHMIN-NEXT:    mv a1, a0
2253; ZVFHMIN-NEXT:    slli a0, a0, 2
2254; ZVFHMIN-NEXT:    add a0, a0, a1
2255; ZVFHMIN-NEXT:    add sp, sp, a0
2256; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
2257; ZVFHMIN-NEXT:    addi sp, sp, 16
2258; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
2259; ZVFHMIN-NEXT:    ret
2260  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl)
2261  ret <vscale x 32 x half> %v
2262}
2263
2264define <vscale x 32 x half> @vfma_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) {
2265; ZVFH-LABEL: vfma_vv_nxv32f16_unmasked:
2266; ZVFH:       # %bb.0:
2267; ZVFH-NEXT:    vl8re16.v v24, (a0)
2268; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
2269; ZVFH-NEXT:    vfmadd.vv v8, v16, v24
2270; ZVFH-NEXT:    ret
2271;
2272; ZVFHMIN-LABEL: vfma_vv_nxv32f16_unmasked:
2273; ZVFHMIN:       # %bb.0:
2274; ZVFHMIN-NEXT:    addi sp, sp, -16
2275; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
2276; ZVFHMIN-NEXT:    csrr a2, vlenb
2277; ZVFHMIN-NEXT:    slli a2, a2, 5
2278; ZVFHMIN-NEXT:    sub sp, sp, a2
2279; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
2280; ZVFHMIN-NEXT:    csrr a2, vlenb
2281; ZVFHMIN-NEXT:    slli a2, a2, 3
2282; ZVFHMIN-NEXT:    mv a3, a2
2283; ZVFHMIN-NEXT:    slli a2, a2, 1
2284; ZVFHMIN-NEXT:    add a2, a2, a3
2285; ZVFHMIN-NEXT:    add a2, sp, a2
2286; ZVFHMIN-NEXT:    addi a2, a2, 16
2287; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
2288; ZVFHMIN-NEXT:    vl8re16.v v16, (a0)
2289; ZVFHMIN-NEXT:    csrr a2, vlenb
2290; ZVFHMIN-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
2291; ZVFHMIN-NEXT:    vmset.m v24
2292; ZVFHMIN-NEXT:    slli a0, a2, 1
2293; ZVFHMIN-NEXT:    srli a2, a2, 2
2294; ZVFHMIN-NEXT:    sub a3, a1, a0
2295; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
2296; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a2
2297; ZVFHMIN-NEXT:    sltu a2, a1, a3
2298; ZVFHMIN-NEXT:    addi a2, a2, -1
2299; ZVFHMIN-NEXT:    and a2, a2, a3
2300; ZVFHMIN-NEXT:    csrr a3, vlenb
2301; ZVFHMIN-NEXT:    slli a3, a3, 3
2302; ZVFHMIN-NEXT:    add a3, sp, a3
2303; ZVFHMIN-NEXT:    addi a3, a3, 16
2304; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
2305; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
2306; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
2307; ZVFHMIN-NEXT:    addi a2, sp, 16
2308; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
2309; ZVFHMIN-NEXT:    csrr a2, vlenb
2310; ZVFHMIN-NEXT:    slli a2, a2, 4
2311; ZVFHMIN-NEXT:    add a2, sp, a2
2312; ZVFHMIN-NEXT:    addi a2, a2, 16
2313; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
2314; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
2315; ZVFHMIN-NEXT:    csrr a2, vlenb
2316; ZVFHMIN-NEXT:    slli a2, a2, 3
2317; ZVFHMIN-NEXT:    mv a3, a2
2318; ZVFHMIN-NEXT:    slli a2, a2, 1
2319; ZVFHMIN-NEXT:    add a2, a2, a3
2320; ZVFHMIN-NEXT:    add a2, sp, a2
2321; ZVFHMIN-NEXT:    addi a2, a2, 16
2322; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
2323; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
2324; ZVFHMIN-NEXT:    addi a2, sp, 16
2325; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
2326; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2327; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
2328; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2329; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
2330; ZVFHMIN-NEXT:    bltu a1, a0, .LBB67_2
2331; ZVFHMIN-NEXT:  # %bb.1:
2332; ZVFHMIN-NEXT:    mv a1, a0
2333; ZVFHMIN-NEXT:  .LBB67_2:
2334; ZVFHMIN-NEXT:    csrr a0, vlenb
2335; ZVFHMIN-NEXT:    slli a0, a0, 3
2336; ZVFHMIN-NEXT:    add a0, sp, a0
2337; ZVFHMIN-NEXT:    addi a0, a0, 16
2338; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2339; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
2340; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
2341; ZVFHMIN-NEXT:    addi a0, sp, 16
2342; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
2343; ZVFHMIN-NEXT:    csrr a0, vlenb
2344; ZVFHMIN-NEXT:    slli a0, a0, 4
2345; ZVFHMIN-NEXT:    add a0, sp, a0
2346; ZVFHMIN-NEXT:    addi a0, a0, 16
2347; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2348; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
2349; ZVFHMIN-NEXT:    csrr a0, vlenb
2350; ZVFHMIN-NEXT:    slli a0, a0, 3
2351; ZVFHMIN-NEXT:    mv a1, a0
2352; ZVFHMIN-NEXT:    slli a0, a0, 1
2353; ZVFHMIN-NEXT:    add a0, a0, a1
2354; ZVFHMIN-NEXT:    add a0, sp, a0
2355; ZVFHMIN-NEXT:    addi a0, a0, 16
2356; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2357; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
2358; ZVFHMIN-NEXT:    addi a0, sp, 16
2359; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2360; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2361; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v8
2362; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2363; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v0
2364; ZVFHMIN-NEXT:    vmv8r.v v8, v16
2365; ZVFHMIN-NEXT:    csrr a0, vlenb
2366; ZVFHMIN-NEXT:    slli a0, a0, 5
2367; ZVFHMIN-NEXT:    add sp, sp, a0
2368; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
2369; ZVFHMIN-NEXT:    addi sp, sp, 16
2370; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
2371; ZVFHMIN-NEXT:    ret
2372  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl)
2373  ret <vscale x 32 x half> %v
2374}
2375
2376define <vscale x 32 x half> @vfma_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
2377; ZVFH-LABEL: vfma_vf_nxv32f16:
2378; ZVFH:       # %bb.0:
2379; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
2380; ZVFH-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
2381; ZVFH-NEXT:    ret
2382;
2383; ZVFHMIN-LABEL: vfma_vf_nxv32f16:
2384; ZVFHMIN:       # %bb.0:
2385; ZVFHMIN-NEXT:    addi sp, sp, -16
2386; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
2387; ZVFHMIN-NEXT:    csrr a1, vlenb
2388; ZVFHMIN-NEXT:    slli a1, a1, 3
2389; ZVFHMIN-NEXT:    mv a2, a1
2390; ZVFHMIN-NEXT:    slli a1, a1, 2
2391; ZVFHMIN-NEXT:    add a1, a1, a2
2392; ZVFHMIN-NEXT:    sub sp, sp, a1
2393; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
2394; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
2395; ZVFHMIN-NEXT:    vmv1r.v v7, v0
2396; ZVFHMIN-NEXT:    vmv8r.v v24, v8
2397; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
2398; ZVFHMIN-NEXT:    csrr a3, vlenb
2399; ZVFHMIN-NEXT:    slli a1, a3, 1
2400; ZVFHMIN-NEXT:    srli a3, a3, 2
2401; ZVFHMIN-NEXT:    sub a4, a0, a1
2402; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
2403; ZVFHMIN-NEXT:    sltu a3, a0, a4
2404; ZVFHMIN-NEXT:    addi a3, a3, -1
2405; ZVFHMIN-NEXT:    and a3, a3, a4
2406; ZVFHMIN-NEXT:    csrr a4, vlenb
2407; ZVFHMIN-NEXT:    slli a4, a4, 4
2408; ZVFHMIN-NEXT:    add a4, sp, a4
2409; ZVFHMIN-NEXT:    addi a4, a4, 16
2410; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
2411; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
2412; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
2413; ZVFHMIN-NEXT:    csrr a4, vlenb
2414; ZVFHMIN-NEXT:    slli a4, a4, 3
2415; ZVFHMIN-NEXT:    add a4, sp, a4
2416; ZVFHMIN-NEXT:    addi a4, a4, 16
2417; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
2418; ZVFHMIN-NEXT:    csrr a4, vlenb
2419; ZVFHMIN-NEXT:    slli a4, a4, 3
2420; ZVFHMIN-NEXT:    mv a5, a4
2421; ZVFHMIN-NEXT:    slli a4, a4, 1
2422; ZVFHMIN-NEXT:    add a4, a4, a5
2423; ZVFHMIN-NEXT:    add a4, sp, a4
2424; ZVFHMIN-NEXT:    addi a4, a4, 16
2425; ZVFHMIN-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
2426; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
2427; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
2428; ZVFHMIN-NEXT:    vmv.v.x v24, a2
2429; ZVFHMIN-NEXT:    csrr a2, vlenb
2430; ZVFHMIN-NEXT:    slli a2, a2, 5
2431; ZVFHMIN-NEXT:    add a2, sp, a2
2432; ZVFHMIN-NEXT:    addi a2, a2, 16
2433; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
2434; ZVFHMIN-NEXT:    csrr a2, vlenb
2435; ZVFHMIN-NEXT:    slli a2, a2, 5
2436; ZVFHMIN-NEXT:    add a2, sp, a2
2437; ZVFHMIN-NEXT:    addi a2, a2, 16
2438; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
2439; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
2440; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
2441; ZVFHMIN-NEXT:    csrr a2, vlenb
2442; ZVFHMIN-NEXT:    slli a2, a2, 3
2443; ZVFHMIN-NEXT:    add a2, sp, a2
2444; ZVFHMIN-NEXT:    addi a2, a2, 16
2445; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
2446; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2447; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
2448; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2449; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
2450; ZVFHMIN-NEXT:    addi a2, sp, 16
2451; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
2452; ZVFHMIN-NEXT:    bltu a0, a1, .LBB68_2
2453; ZVFHMIN-NEXT:  # %bb.1:
2454; ZVFHMIN-NEXT:    mv a0, a1
2455; ZVFHMIN-NEXT:  .LBB68_2:
2456; ZVFHMIN-NEXT:    vmv1r.v v0, v7
2457; ZVFHMIN-NEXT:    csrr a1, vlenb
2458; ZVFHMIN-NEXT:    slli a1, a1, 4
2459; ZVFHMIN-NEXT:    add a1, sp, a1
2460; ZVFHMIN-NEXT:    addi a1, a1, 16
2461; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
2462; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2463; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
2464; ZVFHMIN-NEXT:    csrr a0, vlenb
2465; ZVFHMIN-NEXT:    slli a0, a0, 3
2466; ZVFHMIN-NEXT:    add a0, sp, a0
2467; ZVFHMIN-NEXT:    addi a0, a0, 16
2468; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
2469; ZVFHMIN-NEXT:    csrr a0, vlenb
2470; ZVFHMIN-NEXT:    slli a0, a0, 3
2471; ZVFHMIN-NEXT:    mv a1, a0
2472; ZVFHMIN-NEXT:    slli a0, a0, 1
2473; ZVFHMIN-NEXT:    add a0, a0, a1
2474; ZVFHMIN-NEXT:    add a0, sp, a0
2475; ZVFHMIN-NEXT:    addi a0, a0, 16
2476; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2477; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
2478; ZVFHMIN-NEXT:    csrr a0, vlenb
2479; ZVFHMIN-NEXT:    slli a0, a0, 4
2480; ZVFHMIN-NEXT:    add a0, sp, a0
2481; ZVFHMIN-NEXT:    addi a0, a0, 16
2482; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
2483; ZVFHMIN-NEXT:    csrr a0, vlenb
2484; ZVFHMIN-NEXT:    slli a0, a0, 5
2485; ZVFHMIN-NEXT:    add a0, sp, a0
2486; ZVFHMIN-NEXT:    addi a0, a0, 16
2487; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
2488; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
2489; ZVFHMIN-NEXT:    csrr a0, vlenb
2490; ZVFHMIN-NEXT:    slli a0, a0, 3
2491; ZVFHMIN-NEXT:    add a0, sp, a0
2492; ZVFHMIN-NEXT:    addi a0, a0, 16
2493; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
2494; ZVFHMIN-NEXT:    csrr a0, vlenb
2495; ZVFHMIN-NEXT:    slli a0, a0, 4
2496; ZVFHMIN-NEXT:    add a0, sp, a0
2497; ZVFHMIN-NEXT:    addi a0, a0, 16
2498; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
2499; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2500; ZVFHMIN-NEXT:    vfmadd.vv v8, v16, v24, v0.t
2501; ZVFHMIN-NEXT:    vmv.v.v v16, v8
2502; ZVFHMIN-NEXT:    addi a0, sp, 16
2503; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2504; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2505; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
2506; ZVFHMIN-NEXT:    csrr a0, vlenb
2507; ZVFHMIN-NEXT:    slli a0, a0, 3
2508; ZVFHMIN-NEXT:    mv a1, a0
2509; ZVFHMIN-NEXT:    slli a0, a0, 2
2510; ZVFHMIN-NEXT:    add a0, a0, a1
2511; ZVFHMIN-NEXT:    add sp, sp, a0
2512; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
2513; ZVFHMIN-NEXT:    addi sp, sp, 16
2514; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
2515; ZVFHMIN-NEXT:    ret
2516  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
2517  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
2518  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
2519  ret <vscale x 32 x half> %v
2520}
2521
2522define <vscale x 32 x half> @vfma_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
2523; ZVFH-LABEL: vfma_vf_nxv32f16_commute:
2524; ZVFH:       # %bb.0:
2525; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
2526; ZVFH-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
2527; ZVFH-NEXT:    ret
2528;
2529; ZVFHMIN-LABEL: vfma_vf_nxv32f16_commute:
2530; ZVFHMIN:       # %bb.0:
2531; ZVFHMIN-NEXT:    addi sp, sp, -16
2532; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
2533; ZVFHMIN-NEXT:    csrr a1, vlenb
2534; ZVFHMIN-NEXT:    slli a1, a1, 3
2535; ZVFHMIN-NEXT:    mv a2, a1
2536; ZVFHMIN-NEXT:    slli a1, a1, 2
2537; ZVFHMIN-NEXT:    add a1, a1, a2
2538; ZVFHMIN-NEXT:    sub sp, sp, a1
2539; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
2540; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
2541; ZVFHMIN-NEXT:    vmv1r.v v7, v0
2542; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
2543; ZVFHMIN-NEXT:    csrr a2, vlenb
2544; ZVFHMIN-NEXT:    vmv.v.x v24, a1
2545; ZVFHMIN-NEXT:    csrr a1, vlenb
2546; ZVFHMIN-NEXT:    slli a1, a1, 5
2547; ZVFHMIN-NEXT:    add a1, sp, a1
2548; ZVFHMIN-NEXT:    addi a1, a1, 16
2549; ZVFHMIN-NEXT:    vs8r.v v24, (a1) # Unknown-size Folded Spill
2550; ZVFHMIN-NEXT:    slli a1, a2, 1
2551; ZVFHMIN-NEXT:    srli a2, a2, 2
2552; ZVFHMIN-NEXT:    sub a3, a0, a1
2553; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
2554; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
2555; ZVFHMIN-NEXT:    sltu a2, a0, a3
2556; ZVFHMIN-NEXT:    addi a2, a2, -1
2557; ZVFHMIN-NEXT:    and a2, a2, a3
2558; ZVFHMIN-NEXT:    csrr a3, vlenb
2559; ZVFHMIN-NEXT:    slli a3, a3, 4
2560; ZVFHMIN-NEXT:    add a3, sp, a3
2561; ZVFHMIN-NEXT:    addi a3, a3, 16
2562; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
2563; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
2564; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
2565; ZVFHMIN-NEXT:    csrr a2, vlenb
2566; ZVFHMIN-NEXT:    slli a2, a2, 3
2567; ZVFHMIN-NEXT:    add a2, sp, a2
2568; ZVFHMIN-NEXT:    addi a2, a2, 16
2569; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
2570; ZVFHMIN-NEXT:    csrr a2, vlenb
2571; ZVFHMIN-NEXT:    slli a2, a2, 5
2572; ZVFHMIN-NEXT:    add a2, sp, a2
2573; ZVFHMIN-NEXT:    addi a2, a2, 16
2574; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
2575; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
2576; ZVFHMIN-NEXT:    vmv4r.v v24, v8
2577; ZVFHMIN-NEXT:    csrr a2, vlenb
2578; ZVFHMIN-NEXT:    slli a2, a2, 3
2579; ZVFHMIN-NEXT:    mv a3, a2
2580; ZVFHMIN-NEXT:    slli a2, a2, 1
2581; ZVFHMIN-NEXT:    add a2, a2, a3
2582; ZVFHMIN-NEXT:    add a2, sp, a2
2583; ZVFHMIN-NEXT:    addi a2, a2, 16
2584; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
2585; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
2586; ZVFHMIN-NEXT:    csrr a2, vlenb
2587; ZVFHMIN-NEXT:    slli a2, a2, 3
2588; ZVFHMIN-NEXT:    add a2, sp, a2
2589; ZVFHMIN-NEXT:    addi a2, a2, 16
2590; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
2591; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2592; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
2593; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2594; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
2595; ZVFHMIN-NEXT:    addi a2, sp, 16
2596; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
2597; ZVFHMIN-NEXT:    bltu a0, a1, .LBB69_2
2598; ZVFHMIN-NEXT:  # %bb.1:
2599; ZVFHMIN-NEXT:    mv a0, a1
2600; ZVFHMIN-NEXT:  .LBB69_2:
2601; ZVFHMIN-NEXT:    vmv1r.v v0, v7
2602; ZVFHMIN-NEXT:    csrr a1, vlenb
2603; ZVFHMIN-NEXT:    slli a1, a1, 4
2604; ZVFHMIN-NEXT:    add a1, sp, a1
2605; ZVFHMIN-NEXT:    addi a1, a1, 16
2606; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
2607; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2608; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
2609; ZVFHMIN-NEXT:    csrr a0, vlenb
2610; ZVFHMIN-NEXT:    slli a0, a0, 3
2611; ZVFHMIN-NEXT:    add a0, sp, a0
2612; ZVFHMIN-NEXT:    addi a0, a0, 16
2613; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
2614; ZVFHMIN-NEXT:    csrr a0, vlenb
2615; ZVFHMIN-NEXT:    slli a0, a0, 3
2616; ZVFHMIN-NEXT:    mv a1, a0
2617; ZVFHMIN-NEXT:    slli a0, a0, 1
2618; ZVFHMIN-NEXT:    add a0, a0, a1
2619; ZVFHMIN-NEXT:    add a0, sp, a0
2620; ZVFHMIN-NEXT:    addi a0, a0, 16
2621; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
2622; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t
2623; ZVFHMIN-NEXT:    csrr a0, vlenb
2624; ZVFHMIN-NEXT:    slli a0, a0, 5
2625; ZVFHMIN-NEXT:    add a0, sp, a0
2626; ZVFHMIN-NEXT:    addi a0, a0, 16
2627; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
2628; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
2629; ZVFHMIN-NEXT:    csrr a0, vlenb
2630; ZVFHMIN-NEXT:    slli a0, a0, 3
2631; ZVFHMIN-NEXT:    mv a1, a0
2632; ZVFHMIN-NEXT:    slli a0, a0, 1
2633; ZVFHMIN-NEXT:    add a0, a0, a1
2634; ZVFHMIN-NEXT:    add a0, sp, a0
2635; ZVFHMIN-NEXT:    addi a0, a0, 16
2636; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
2637; ZVFHMIN-NEXT:    csrr a0, vlenb
2638; ZVFHMIN-NEXT:    slli a0, a0, 3
2639; ZVFHMIN-NEXT:    add a0, sp, a0
2640; ZVFHMIN-NEXT:    addi a0, a0, 16
2641; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
2642; ZVFHMIN-NEXT:    csrr a0, vlenb
2643; ZVFHMIN-NEXT:    slli a0, a0, 3
2644; ZVFHMIN-NEXT:    mv a1, a0
2645; ZVFHMIN-NEXT:    slli a0, a0, 1
2646; ZVFHMIN-NEXT:    add a0, a0, a1
2647; ZVFHMIN-NEXT:    add a0, sp, a0
2648; ZVFHMIN-NEXT:    addi a0, a0, 16
2649; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
2650; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2651; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
2652; ZVFHMIN-NEXT:    vmv.v.v v16, v8
2653; ZVFHMIN-NEXT:    addi a0, sp, 16
2654; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2655; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2656; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
2657; ZVFHMIN-NEXT:    csrr a0, vlenb
2658; ZVFHMIN-NEXT:    slli a0, a0, 3
2659; ZVFHMIN-NEXT:    mv a1, a0
2660; ZVFHMIN-NEXT:    slli a0, a0, 2
2661; ZVFHMIN-NEXT:    add a0, a0, a1
2662; ZVFHMIN-NEXT:    add sp, sp, a0
2663; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
2664; ZVFHMIN-NEXT:    addi sp, sp, 16
2665; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
2666; ZVFHMIN-NEXT:    ret
2667  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
2668  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
2669  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
2670  ret <vscale x 32 x half> %v
2671}
2672
2673define <vscale x 32 x half> @vfma_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
2674; ZVFH-LABEL: vfma_vf_nxv32f16_unmasked:
2675; ZVFH:       # %bb.0:
2676; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
2677; ZVFH-NEXT:    vfmadd.vf v8, fa0, v16
2678; ZVFH-NEXT:    ret
2679;
2680; ZVFHMIN-LABEL: vfma_vf_nxv32f16_unmasked:
2681; ZVFHMIN:       # %bb.0:
2682; ZVFHMIN-NEXT:    addi sp, sp, -16
2683; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
2684; ZVFHMIN-NEXT:    csrr a1, vlenb
2685; ZVFHMIN-NEXT:    slli a1, a1, 5
2686; ZVFHMIN-NEXT:    sub sp, sp, a1
2687; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
2688; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
2689; ZVFHMIN-NEXT:    csrr a3, vlenb
2690; ZVFHMIN-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
2691; ZVFHMIN-NEXT:    vmset.m v24
2692; ZVFHMIN-NEXT:    slli a1, a3, 1
2693; ZVFHMIN-NEXT:    srli a3, a3, 2
2694; ZVFHMIN-NEXT:    sub a4, a0, a1
2695; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
2696; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
2697; ZVFHMIN-NEXT:    sltu a3, a0, a4
2698; ZVFHMIN-NEXT:    addi a3, a3, -1
2699; ZVFHMIN-NEXT:    and a3, a3, a4
2700; ZVFHMIN-NEXT:    csrr a4, vlenb
2701; ZVFHMIN-NEXT:    slli a4, a4, 4
2702; ZVFHMIN-NEXT:    add a4, sp, a4
2703; ZVFHMIN-NEXT:    addi a4, a4, 16
2704; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
2705; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
2706; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
2707; ZVFHMIN-NEXT:    addi a4, sp, 16
2708; ZVFHMIN-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
2709; ZVFHMIN-NEXT:    csrr a4, vlenb
2710; ZVFHMIN-NEXT:    slli a4, a4, 3
2711; ZVFHMIN-NEXT:    add a4, sp, a4
2712; ZVFHMIN-NEXT:    addi a4, a4, 16
2713; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
2714; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
2715; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
2716; ZVFHMIN-NEXT:    vmv.v.x v8, a2
2717; ZVFHMIN-NEXT:    csrr a2, vlenb
2718; ZVFHMIN-NEXT:    slli a2, a2, 3
2719; ZVFHMIN-NEXT:    mv a4, a2
2720; ZVFHMIN-NEXT:    slli a2, a2, 1
2721; ZVFHMIN-NEXT:    add a2, a2, a4
2722; ZVFHMIN-NEXT:    add a2, sp, a2
2723; ZVFHMIN-NEXT:    addi a2, a2, 16
2724; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
2725; ZVFHMIN-NEXT:    csrr a2, vlenb
2726; ZVFHMIN-NEXT:    slli a2, a2, 3
2727; ZVFHMIN-NEXT:    mv a4, a2
2728; ZVFHMIN-NEXT:    slli a2, a2, 1
2729; ZVFHMIN-NEXT:    add a2, a2, a4
2730; ZVFHMIN-NEXT:    add a2, sp, a2
2731; ZVFHMIN-NEXT:    addi a2, a2, 16
2732; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
2733; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
2734; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
2735; ZVFHMIN-NEXT:    addi a2, sp, 16
2736; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
2737; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2738; ZVFHMIN-NEXT:    vfmadd.vv v8, v16, v24, v0.t
2739; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2740; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
2741; ZVFHMIN-NEXT:    bltu a0, a1, .LBB70_2
2742; ZVFHMIN-NEXT:  # %bb.1:
2743; ZVFHMIN-NEXT:    mv a0, a1
2744; ZVFHMIN-NEXT:  .LBB70_2:
2745; ZVFHMIN-NEXT:    csrr a1, vlenb
2746; ZVFHMIN-NEXT:    slli a1, a1, 4
2747; ZVFHMIN-NEXT:    add a1, sp, a1
2748; ZVFHMIN-NEXT:    addi a1, a1, 16
2749; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
2750; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2751; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24
2752; ZVFHMIN-NEXT:    addi a0, sp, 16
2753; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
2754; ZVFHMIN-NEXT:    csrr a0, vlenb
2755; ZVFHMIN-NEXT:    slli a0, a0, 3
2756; ZVFHMIN-NEXT:    add a0, sp, a0
2757; ZVFHMIN-NEXT:    addi a0, a0, 16
2758; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
2759; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
2760; ZVFHMIN-NEXT:    csrr a0, vlenb
2761; ZVFHMIN-NEXT:    slli a0, a0, 3
2762; ZVFHMIN-NEXT:    mv a1, a0
2763; ZVFHMIN-NEXT:    slli a0, a0, 1
2764; ZVFHMIN-NEXT:    add a0, a0, a1
2765; ZVFHMIN-NEXT:    add a0, sp, a0
2766; ZVFHMIN-NEXT:    addi a0, a0, 16
2767; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2768; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
2769; ZVFHMIN-NEXT:    addi a0, sp, 16
2770; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2771; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2772; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v8
2773; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2774; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v0
2775; ZVFHMIN-NEXT:    vmv8r.v v8, v16
2776; ZVFHMIN-NEXT:    csrr a0, vlenb
2777; ZVFHMIN-NEXT:    slli a0, a0, 5
2778; ZVFHMIN-NEXT:    add sp, sp, a0
2779; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
2780; ZVFHMIN-NEXT:    addi sp, sp, 16
2781; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
2782; ZVFHMIN-NEXT:    ret
2783  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
2784  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
2785  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
2786  ret <vscale x 32 x half> %v
2787}
2788
2789define <vscale x 32 x half> @vfma_vf_nxv32f16_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
2790; ZVFH-LABEL: vfma_vf_nxv32f16_unmasked_commute:
2791; ZVFH:       # %bb.0:
2792; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
2793; ZVFH-NEXT:    vfmadd.vf v8, fa0, v16
2794; ZVFH-NEXT:    ret
2795;
2796; ZVFHMIN-LABEL: vfma_vf_nxv32f16_unmasked_commute:
2797; ZVFHMIN:       # %bb.0:
2798; ZVFHMIN-NEXT:    addi sp, sp, -16
2799; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
2800; ZVFHMIN-NEXT:    csrr a1, vlenb
2801; ZVFHMIN-NEXT:    slli a1, a1, 5
2802; ZVFHMIN-NEXT:    sub sp, sp, a1
2803; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
2804; ZVFHMIN-NEXT:    csrr a1, vlenb
2805; ZVFHMIN-NEXT:    slli a1, a1, 3
2806; ZVFHMIN-NEXT:    mv a2, a1
2807; ZVFHMIN-NEXT:    slli a1, a1, 1
2808; ZVFHMIN-NEXT:    add a1, a1, a2
2809; ZVFHMIN-NEXT:    add a1, sp, a1
2810; ZVFHMIN-NEXT:    addi a1, a1, 16
2811; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
2812; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
2813; ZVFHMIN-NEXT:    csrr a2, vlenb
2814; ZVFHMIN-NEXT:    vsetvli a3, zero, e16, m8, ta, ma
2815; ZVFHMIN-NEXT:    vmset.m v24
2816; ZVFHMIN-NEXT:    vmv.v.x v8, a1
2817; ZVFHMIN-NEXT:    slli a1, a2, 1
2818; ZVFHMIN-NEXT:    srli a2, a2, 2
2819; ZVFHMIN-NEXT:    sub a3, a0, a1
2820; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
2821; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a2
2822; ZVFHMIN-NEXT:    sltu a2, a0, a3
2823; ZVFHMIN-NEXT:    addi a2, a2, -1
2824; ZVFHMIN-NEXT:    and a2, a2, a3
2825; ZVFHMIN-NEXT:    csrr a3, vlenb
2826; ZVFHMIN-NEXT:    slli a3, a3, 4
2827; ZVFHMIN-NEXT:    add a3, sp, a3
2828; ZVFHMIN-NEXT:    addi a3, a3, 16
2829; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
2830; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
2831; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
2832; ZVFHMIN-NEXT:    addi a2, sp, 16
2833; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
2834; ZVFHMIN-NEXT:    csrr a2, vlenb
2835; ZVFHMIN-NEXT:    slli a2, a2, 3
2836; ZVFHMIN-NEXT:    add a2, sp, a2
2837; ZVFHMIN-NEXT:    addi a2, a2, 16
2838; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
2839; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
2840; ZVFHMIN-NEXT:    csrr a2, vlenb
2841; ZVFHMIN-NEXT:    slli a2, a2, 3
2842; ZVFHMIN-NEXT:    mv a3, a2
2843; ZVFHMIN-NEXT:    slli a2, a2, 1
2844; ZVFHMIN-NEXT:    add a2, a2, a3
2845; ZVFHMIN-NEXT:    add a2, sp, a2
2846; ZVFHMIN-NEXT:    addi a2, a2, 16
2847; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
2848; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
2849; ZVFHMIN-NEXT:    addi a2, sp, 16
2850; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
2851; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2852; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
2853; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2854; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
2855; ZVFHMIN-NEXT:    bltu a0, a1, .LBB71_2
2856; ZVFHMIN-NEXT:  # %bb.1:
2857; ZVFHMIN-NEXT:    mv a0, a1
2858; ZVFHMIN-NEXT:  .LBB71_2:
2859; ZVFHMIN-NEXT:    csrr a1, vlenb
2860; ZVFHMIN-NEXT:    slli a1, a1, 4
2861; ZVFHMIN-NEXT:    add a1, sp, a1
2862; ZVFHMIN-NEXT:    addi a1, a1, 16
2863; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
2864; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2865; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24
2866; ZVFHMIN-NEXT:    addi a0, sp, 16
2867; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
2868; ZVFHMIN-NEXT:    csrr a0, vlenb
2869; ZVFHMIN-NEXT:    slli a0, a0, 3
2870; ZVFHMIN-NEXT:    mv a1, a0
2871; ZVFHMIN-NEXT:    slli a0, a0, 1
2872; ZVFHMIN-NEXT:    add a0, a0, a1
2873; ZVFHMIN-NEXT:    add a0, sp, a0
2874; ZVFHMIN-NEXT:    addi a0, a0, 16
2875; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
2876; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
2877; ZVFHMIN-NEXT:    csrr a0, vlenb
2878; ZVFHMIN-NEXT:    slli a0, a0, 3
2879; ZVFHMIN-NEXT:    add a0, sp, a0
2880; ZVFHMIN-NEXT:    addi a0, a0, 16
2881; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2882; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
2883; ZVFHMIN-NEXT:    addi a0, sp, 16
2884; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
2885; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
2886; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v8
2887; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
2888; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v0
2889; ZVFHMIN-NEXT:    vmv8r.v v8, v16
2890; ZVFHMIN-NEXT:    csrr a0, vlenb
2891; ZVFHMIN-NEXT:    slli a0, a0, 5
2892; ZVFHMIN-NEXT:    add sp, sp, a0
2893; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
2894; ZVFHMIN-NEXT:    addi sp, sp, 16
2895; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
2896; ZVFHMIN-NEXT:    ret
2897  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
2898  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
2899  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
2900  ret <vscale x 32 x half> %v
2901}
2902
2903declare <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32)
2904
2905define <vscale x 1 x float> @vfma_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
2906; CHECK-LABEL: vfma_vv_nxv1f32:
2907; CHECK:       # %bb.0:
2908; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
2909; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
2910; CHECK-NEXT:    vmv1r.v v8, v9
2911; CHECK-NEXT:    ret
2912  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
2913  ret <vscale x 1 x float> %v
2914}
2915
2916define <vscale x 1 x float> @vfma_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
2917; CHECK-LABEL: vfma_vv_nxv1f32_unmasked:
2918; CHECK:       # %bb.0:
2919; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
2920; CHECK-NEXT:    vfmadd.vv v8, v9, v10
2921; CHECK-NEXT:    ret
2922  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
2923  ret <vscale x 1 x float> %v
2924}
2925
2926define <vscale x 1 x float> @vfma_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
2927; CHECK-LABEL: vfma_vf_nxv1f32:
2928; CHECK:       # %bb.0:
2929; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
2930; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
2931; CHECK-NEXT:    ret
2932  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
2933  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
2934  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
2935  ret <vscale x 1 x float> %v
2936}
2937
2938define <vscale x 1 x float> @vfma_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
2939; CHECK-LABEL: vfma_vf_nxv1f32_commute:
2940; CHECK:       # %bb.0:
2941; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
2942; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
2943; CHECK-NEXT:    ret
2944  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
2945  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
2946  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
2947  ret <vscale x 1 x float> %v
2948}
2949
2950define <vscale x 1 x float> @vfma_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
2951; CHECK-LABEL: vfma_vf_nxv1f32_unmasked:
2952; CHECK:       # %bb.0:
2953; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
2954; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
2955; CHECK-NEXT:    ret
2956  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
2957  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
2958  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
2959  ret <vscale x 1 x float> %v
2960}
2961
2962define <vscale x 1 x float> @vfma_vf_nxv1f32_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
2963; CHECK-LABEL: vfma_vf_nxv1f32_unmasked_commute:
2964; CHECK:       # %bb.0:
2965; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
2966; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
2967; CHECK-NEXT:    ret
2968  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
2969  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
2970  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
2971  ret <vscale x 1 x float> %v
2972}
2973
2974declare <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32)
2975
2976define <vscale x 2 x float> @vfma_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
2977; CHECK-LABEL: vfma_vv_nxv2f32:
2978; CHECK:       # %bb.0:
2979; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
2980; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
2981; CHECK-NEXT:    vmv.v.v v8, v9
2982; CHECK-NEXT:    ret
2983  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
2984  ret <vscale x 2 x float> %v
2985}
2986
2987define <vscale x 2 x float> @vfma_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
2988; CHECK-LABEL: vfma_vv_nxv2f32_unmasked:
2989; CHECK:       # %bb.0:
2990; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
2991; CHECK-NEXT:    vfmadd.vv v8, v9, v10
2992; CHECK-NEXT:    ret
2993  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
2994  ret <vscale x 2 x float> %v
2995}
2996
2997define <vscale x 2 x float> @vfma_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
2998; CHECK-LABEL: vfma_vf_nxv2f32:
2999; CHECK:       # %bb.0:
3000; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
3001; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
3002; CHECK-NEXT:    ret
3003  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
3004  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
3005  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
3006  ret <vscale x 2 x float> %v
3007}
3008
3009define <vscale x 2 x float> @vfma_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
3010; CHECK-LABEL: vfma_vf_nxv2f32_commute:
3011; CHECK:       # %bb.0:
3012; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
3013; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
3014; CHECK-NEXT:    ret
3015  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
3016  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
3017  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
3018  ret <vscale x 2 x float> %v
3019}
3020
3021define <vscale x 2 x float> @vfma_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
3022; CHECK-LABEL: vfma_vf_nxv2f32_unmasked:
3023; CHECK:       # %bb.0:
3024; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
3025; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
3026; CHECK-NEXT:    ret
3027  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
3028  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
3029  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
3030  ret <vscale x 2 x float> %v
3031}
3032
3033define <vscale x 2 x float> @vfma_vf_nxv2f32_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
3034; CHECK-LABEL: vfma_vf_nxv2f32_unmasked_commute:
3035; CHECK:       # %bb.0:
3036; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
3037; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
3038; CHECK-NEXT:    ret
3039  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
3040  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
3041  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
3042  ret <vscale x 2 x float> %v
3043}
3044
3045declare <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32)
3046
3047define <vscale x 4 x float> @vfma_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
3048; CHECK-LABEL: vfma_vv_nxv4f32:
3049; CHECK:       # %bb.0:
3050; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
3051; CHECK-NEXT:    vfmadd.vv v10, v8, v12, v0.t
3052; CHECK-NEXT:    vmv.v.v v8, v10
3053; CHECK-NEXT:    ret
3054  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
3055  ret <vscale x 4 x float> %v
3056}
3057
3058define <vscale x 4 x float> @vfma_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
3059; CHECK-LABEL: vfma_vv_nxv4f32_unmasked:
3060; CHECK:       # %bb.0:
3061; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
3062; CHECK-NEXT:    vfmadd.vv v8, v10, v12
3063; CHECK-NEXT:    ret
3064  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
3065  ret <vscale x 4 x float> %v
3066}
3067
3068define <vscale x 4 x float> @vfma_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
3069; CHECK-LABEL: vfma_vf_nxv4f32:
3070; CHECK:       # %bb.0:
3071; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
3072; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
3073; CHECK-NEXT:    ret
3074  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
3075  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
3076  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
3077  ret <vscale x 4 x float> %v
3078}
3079
3080define <vscale x 4 x float> @vfma_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
3081; CHECK-LABEL: vfma_vf_nxv4f32_commute:
3082; CHECK:       # %bb.0:
3083; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
3084; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
3085; CHECK-NEXT:    ret
3086  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
3087  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
3088  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
3089  ret <vscale x 4 x float> %v
3090}
3091
3092define <vscale x 4 x float> @vfma_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
3093; CHECK-LABEL: vfma_vf_nxv4f32_unmasked:
3094; CHECK:       # %bb.0:
3095; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
3096; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
3097; CHECK-NEXT:    ret
3098  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
3099  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
3100  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
3101  ret <vscale x 4 x float> %v
3102}
3103
3104define <vscale x 4 x float> @vfma_vf_nxv4f32_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
3105; CHECK-LABEL: vfma_vf_nxv4f32_unmasked_commute:
3106; CHECK:       # %bb.0:
3107; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
3108; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
3109; CHECK-NEXT:    ret
3110  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
3111  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
3112  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
3113  ret <vscale x 4 x float> %v
3114}
3115
3116declare <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32)
3117
3118define <vscale x 8 x float> @vfma_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
3119; CHECK-LABEL: vfma_vv_nxv8f32:
3120; CHECK:       # %bb.0:
3121; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
3122; CHECK-NEXT:    vfmadd.vv v12, v8, v16, v0.t
3123; CHECK-NEXT:    vmv.v.v v8, v12
3124; CHECK-NEXT:    ret
3125  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
3126  ret <vscale x 8 x float> %v
3127}
3128
3129define <vscale x 8 x float> @vfma_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
3130; CHECK-LABEL: vfma_vv_nxv8f32_unmasked:
3131; CHECK:       # %bb.0:
3132; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
3133; CHECK-NEXT:    vfmadd.vv v8, v12, v16
3134; CHECK-NEXT:    ret
3135  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
3136  ret <vscale x 8 x float> %v
3137}
3138
3139define <vscale x 8 x float> @vfma_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
3140; CHECK-LABEL: vfma_vf_nxv8f32:
3141; CHECK:       # %bb.0:
3142; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
3143; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
3144; CHECK-NEXT:    ret
3145  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3146  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3147  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
3148  ret <vscale x 8 x float> %v
3149}
3150
3151define <vscale x 8 x float> @vfma_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
3152; CHECK-LABEL: vfma_vf_nxv8f32_commute:
3153; CHECK:       # %bb.0:
3154; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
3155; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
3156; CHECK-NEXT:    ret
3157  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3158  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3159  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
3160  ret <vscale x 8 x float> %v
3161}
3162
3163define <vscale x 8 x float> @vfma_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
3164; CHECK-LABEL: vfma_vf_nxv8f32_unmasked:
3165; CHECK:       # %bb.0:
3166; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
3167; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
3168; CHECK-NEXT:    ret
3169  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3170  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3171  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
3172  ret <vscale x 8 x float> %v
3173}
3174
3175define <vscale x 8 x float> @vfma_vf_nxv8f32_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
3176; CHECK-LABEL: vfma_vf_nxv8f32_unmasked_commute:
3177; CHECK:       # %bb.0:
3178; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
3179; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
3180; CHECK-NEXT:    ret
3181  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3182  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3183  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
3184  ret <vscale x 8 x float> %v
3185}
3186
3187declare <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32)
3188
3189define <vscale x 16 x float> @vfma_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
3190; CHECK-LABEL: vfma_vv_nxv16f32:
3191; CHECK:       # %bb.0:
3192; CHECK-NEXT:    vl8re32.v v24, (a0)
3193; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
3194; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t
3195; CHECK-NEXT:    vmv.v.v v8, v16
3196; CHECK-NEXT:    ret
3197  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
3198  ret <vscale x 16 x float> %v
3199}
3200
3201define <vscale x 16 x float> @vfma_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
3202; CHECK-LABEL: vfma_vv_nxv16f32_unmasked:
3203; CHECK:       # %bb.0:
3204; CHECK-NEXT:    vl8re32.v v24, (a0)
3205; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
3206; CHECK-NEXT:    vfmadd.vv v8, v16, v24
3207; CHECK-NEXT:    ret
3208  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
3209  ret <vscale x 16 x float> %v
3210}
3211
3212define <vscale x 16 x float> @vfma_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
3213; CHECK-LABEL: vfma_vf_nxv16f32:
3214; CHECK:       # %bb.0:
3215; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
3216; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
3217; CHECK-NEXT:    ret
3218  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
3219  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
3220  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
3221  ret <vscale x 16 x float> %v
3222}
3223
3224define <vscale x 16 x float> @vfma_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
3225; CHECK-LABEL: vfma_vf_nxv16f32_commute:
3226; CHECK:       # %bb.0:
3227; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
3228; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
3229; CHECK-NEXT:    ret
3230  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
3231  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
3232  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
3233  ret <vscale x 16 x float> %v
3234}
3235
3236define <vscale x 16 x float> @vfma_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
3237; CHECK-LABEL: vfma_vf_nxv16f32_unmasked:
3238; CHECK:       # %bb.0:
3239; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
3240; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
3241; CHECK-NEXT:    ret
3242  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
3243  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
3244  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
3245  ret <vscale x 16 x float> %v
3246}
3247
3248define <vscale x 16 x float> @vfma_vf_nxv16f32_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
3249; CHECK-LABEL: vfma_vf_nxv16f32_unmasked_commute:
3250; CHECK:       # %bb.0:
3251; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
3252; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
3253; CHECK-NEXT:    ret
3254  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
3255  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
3256  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
3257  ret <vscale x 16 x float> %v
3258}
3259
3260declare <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32)
3261
3262define <vscale x 1 x double> @vfma_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
3263; CHECK-LABEL: vfma_vv_nxv1f64:
3264; CHECK:       # %bb.0:
3265; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
3266; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
3267; CHECK-NEXT:    vmv.v.v v8, v9
3268; CHECK-NEXT:    ret
3269  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
3270  ret <vscale x 1 x double> %v
3271}
3272
3273define <vscale x 1 x double> @vfma_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
3274; CHECK-LABEL: vfma_vv_nxv1f64_unmasked:
3275; CHECK:       # %bb.0:
3276; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
3277; CHECK-NEXT:    vfmadd.vv v8, v9, v10
3278; CHECK-NEXT:    ret
3279  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3280  ret <vscale x 1 x double> %v
3281}
3282
3283define <vscale x 1 x double> @vfma_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
3284; CHECK-LABEL: vfma_vf_nxv1f64:
3285; CHECK:       # %bb.0:
3286; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
3287; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
3288; CHECK-NEXT:    ret
3289  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
3290  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
3291  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
3292  ret <vscale x 1 x double> %v
3293}
3294
3295define <vscale x 1 x double> @vfma_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
3296; CHECK-LABEL: vfma_vf_nxv1f64_commute:
3297; CHECK:       # %bb.0:
3298; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
3299; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
3300; CHECK-NEXT:    ret
3301  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
3302  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
3303  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
3304  ret <vscale x 1 x double> %v
3305}
3306
3307define <vscale x 1 x double> @vfma_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
3308; CHECK-LABEL: vfma_vf_nxv1f64_unmasked:
3309; CHECK:       # %bb.0:
3310; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
3311; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
3312; CHECK-NEXT:    ret
3313  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
3314  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
3315  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3316  ret <vscale x 1 x double> %v
3317}
3318
3319define <vscale x 1 x double> @vfma_vf_nxv1f64_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
3320; CHECK-LABEL: vfma_vf_nxv1f64_unmasked_commute:
3321; CHECK:       # %bb.0:
3322; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
3323; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
3324; CHECK-NEXT:    ret
3325  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
3326  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
3327  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3328  ret <vscale x 1 x double> %v
3329}
3330
3331declare <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32)
3332
3333define <vscale x 2 x double> @vfma_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
3334; CHECK-LABEL: vfma_vv_nxv2f64:
3335; CHECK:       # %bb.0:
3336; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
3337; CHECK-NEXT:    vfmadd.vv v10, v8, v12, v0.t
3338; CHECK-NEXT:    vmv.v.v v8, v10
3339; CHECK-NEXT:    ret
3340  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
3341  ret <vscale x 2 x double> %v
3342}
3343
3344define <vscale x 2 x double> @vfma_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
3345; CHECK-LABEL: vfma_vv_nxv2f64_unmasked:
3346; CHECK:       # %bb.0:
3347; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
3348; CHECK-NEXT:    vfmadd.vv v8, v10, v12
3349; CHECK-NEXT:    ret
3350  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
3351  ret <vscale x 2 x double> %v
3352}
3353
3354define <vscale x 2 x double> @vfma_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
3355; CHECK-LABEL: vfma_vf_nxv2f64:
3356; CHECK:       # %bb.0:
3357; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
3358; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
3359; CHECK-NEXT:    ret
3360  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
3361  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
3362  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
3363  ret <vscale x 2 x double> %v
3364}
3365
3366define <vscale x 2 x double> @vfma_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
3367; CHECK-LABEL: vfma_vf_nxv2f64_commute:
3368; CHECK:       # %bb.0:
3369; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
3370; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
3371; CHECK-NEXT:    ret
3372  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
3373  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
3374  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
3375  ret <vscale x 2 x double> %v
3376}
3377
3378define <vscale x 2 x double> @vfma_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
3379; CHECK-LABEL: vfma_vf_nxv2f64_unmasked:
3380; CHECK:       # %bb.0:
3381; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
3382; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
3383; CHECK-NEXT:    ret
3384  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
3385  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
3386  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
3387  ret <vscale x 2 x double> %v
3388}
3389
3390define <vscale x 2 x double> @vfma_vf_nxv2f64_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
3391; CHECK-LABEL: vfma_vf_nxv2f64_unmasked_commute:
3392; CHECK:       # %bb.0:
3393; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
3394; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
3395; CHECK-NEXT:    ret
3396  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
3397  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
3398  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
3399  ret <vscale x 2 x double> %v
3400}
3401
3402declare <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32)
3403
3404define <vscale x 4 x double> @vfma_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
3405; CHECK-LABEL: vfma_vv_nxv4f64:
3406; CHECK:       # %bb.0:
3407; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
3408; CHECK-NEXT:    vfmadd.vv v12, v8, v16, v0.t
3409; CHECK-NEXT:    vmv.v.v v8, v12
3410; CHECK-NEXT:    ret
3411  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
3412  ret <vscale x 4 x double> %v
3413}
3414
3415define <vscale x 4 x double> @vfma_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
3416; CHECK-LABEL: vfma_vv_nxv4f64_unmasked:
3417; CHECK:       # %bb.0:
3418; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
3419; CHECK-NEXT:    vfmadd.vv v8, v12, v16
3420; CHECK-NEXT:    ret
3421  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
3422  ret <vscale x 4 x double> %v
3423}
3424
3425define <vscale x 4 x double> @vfma_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
3426; CHECK-LABEL: vfma_vf_nxv4f64:
3427; CHECK:       # %bb.0:
3428; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
3429; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
3430; CHECK-NEXT:    ret
3431  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
3432  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
3433  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
3434  ret <vscale x 4 x double> %v
3435}
3436
3437define <vscale x 4 x double> @vfma_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
3438; CHECK-LABEL: vfma_vf_nxv4f64_commute:
3439; CHECK:       # %bb.0:
3440; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
3441; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
3442; CHECK-NEXT:    ret
3443  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
3444  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
3445  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
3446  ret <vscale x 4 x double> %v
3447}
3448
3449define <vscale x 4 x double> @vfma_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
3450; CHECK-LABEL: vfma_vf_nxv4f64_unmasked:
3451; CHECK:       # %bb.0:
3452; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
3453; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
3454; CHECK-NEXT:    ret
3455  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
3456  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
3457  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
3458  ret <vscale x 4 x double> %v
3459}
3460
3461define <vscale x 4 x double> @vfma_vf_nxv4f64_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
3462; CHECK-LABEL: vfma_vf_nxv4f64_unmasked_commute:
3463; CHECK:       # %bb.0:
3464; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
3465; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
3466; CHECK-NEXT:    ret
3467  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
3468  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
3469  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
3470  ret <vscale x 4 x double> %v
3471}
3472
3473declare <vscale x 7 x double> @llvm.vp.fma.nxv7f64(<vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x i1>, i32)
3474
3475define <vscale x 7 x double> @vfma_vv_nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, <vscale x 7 x i1> %m, i32 zeroext %evl) {
3476; CHECK-LABEL: vfma_vv_nxv7f64:
3477; CHECK:       # %bb.0:
3478; CHECK-NEXT:    vl8re64.v v24, (a0)
3479; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
3480; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t
3481; CHECK-NEXT:    vmv.v.v v8, v16
3482; CHECK-NEXT:    ret
3483  %v = call <vscale x 7 x double> @llvm.vp.fma.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, <vscale x 7 x i1> %m, i32 %evl)
3484  ret <vscale x 7 x double> %v
3485}
3486
3487define <vscale x 7 x double> @vfma_vv_nxv7f64_unmasked(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, i32 zeroext %evl) {
3488; CHECK-LABEL: vfma_vv_nxv7f64_unmasked:
3489; CHECK:       # %bb.0:
3490; CHECK-NEXT:    vl8re64.v v24, (a0)
3491; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
3492; CHECK-NEXT:    vfmadd.vv v8, v16, v24
3493; CHECK-NEXT:    ret
3494  %v = call <vscale x 7 x double> @llvm.vp.fma.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, <vscale x 7 x i1> splat (i1 true), i32 %evl)
3495  ret <vscale x 7 x double> %v
3496}
3497
3498declare <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32)
3499
3500define <vscale x 8 x double> @vfma_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
3501; CHECK-LABEL: vfma_vv_nxv8f64:
3502; CHECK:       # %bb.0:
3503; CHECK-NEXT:    vl8re64.v v24, (a0)
3504; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
3505; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t
3506; CHECK-NEXT:    vmv.v.v v8, v16
3507; CHECK-NEXT:    ret
3508  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
3509  ret <vscale x 8 x double> %v
3510}
3511
3512define <vscale x 8 x double> @vfma_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
3513; CHECK-LABEL: vfma_vv_nxv8f64_unmasked:
3514; CHECK:       # %bb.0:
3515; CHECK-NEXT:    vl8re64.v v24, (a0)
3516; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
3517; CHECK-NEXT:    vfmadd.vv v8, v16, v24
3518; CHECK-NEXT:    ret
3519  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
3520  ret <vscale x 8 x double> %v
3521}
3522
3523define <vscale x 8 x double> @vfma_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
3524; CHECK-LABEL: vfma_vf_nxv8f64:
3525; CHECK:       # %bb.0:
3526; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
3527; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
3528; CHECK-NEXT:    ret
3529  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3530  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3531  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
3532  ret <vscale x 8 x double> %v
3533}
3534
3535define <vscale x 8 x double> @vfma_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
3536; CHECK-LABEL: vfma_vf_nxv8f64_commute:
3537; CHECK:       # %bb.0:
3538; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
3539; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
3540; CHECK-NEXT:    ret
3541  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3542  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3543  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
3544  ret <vscale x 8 x double> %v
3545}
3546
3547define <vscale x 8 x double> @vfma_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
3548; CHECK-LABEL: vfma_vf_nxv8f64_unmasked:
3549; CHECK:       # %bb.0:
3550; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
3551; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
3552; CHECK-NEXT:    ret
3553  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3554  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3555  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
3556  ret <vscale x 8 x double> %v
3557}
3558
3559define <vscale x 8 x double> @vfma_vf_nxv8f64_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
3560; CHECK-LABEL: vfma_vf_nxv8f64_unmasked_commute:
3561; CHECK:       # %bb.0:
3562; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
3563; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
3564; CHECK-NEXT:    ret
3565  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3566  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3567  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
3568  ret <vscale x 8 x double> %v
3569}
3570
3571declare <vscale x 16 x double> @llvm.vp.fma.nxv16f64(<vscale x 16 x double>, <vscale x 16 x double>, <vscale x 16 x double>, <vscale x 16 x i1>, i32)
3572
3573define <vscale x 16 x double> @vfma_vv_nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
3574; CHECK-LABEL: vfma_vv_nxv16f64:
3575; CHECK:       # %bb.0:
3576; CHECK-NEXT:    addi sp, sp, -16
3577; CHECK-NEXT:    .cfi_def_cfa_offset 16
3578; CHECK-NEXT:    csrr a1, vlenb
3579; CHECK-NEXT:    slli a1, a1, 4
3580; CHECK-NEXT:    mv a3, a1
3581; CHECK-NEXT:    slli a1, a1, 1
3582; CHECK-NEXT:    add a1, a1, a3
3583; CHECK-NEXT:    sub sp, sp, a1
3584; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x30, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 48 * vlenb
3585; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
3586; CHECK-NEXT:    vmv1r.v v7, v0
3587; CHECK-NEXT:    csrr a1, vlenb
3588; CHECK-NEXT:    slli a1, a1, 3
3589; CHECK-NEXT:    mv a3, a1
3590; CHECK-NEXT:    slli a1, a1, 1
3591; CHECK-NEXT:    add a1, a1, a3
3592; CHECK-NEXT:    add a1, sp, a1
3593; CHECK-NEXT:    addi a1, a1, 16
3594; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
3595; CHECK-NEXT:    csrr a1, vlenb
3596; CHECK-NEXT:    slli a1, a1, 5
3597; CHECK-NEXT:    add a1, sp, a1
3598; CHECK-NEXT:    addi a1, a1, 16
3599; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
3600; CHECK-NEXT:    csrr a1, vlenb
3601; CHECK-NEXT:    srli a3, a1, 3
3602; CHECK-NEXT:    slli a5, a1, 3
3603; CHECK-NEXT:    sub a6, a4, a1
3604; CHECK-NEXT:    add a7, a2, a5
3605; CHECK-NEXT:    add a5, a0, a5
3606; CHECK-NEXT:    vl8re64.v v8, (a7)
3607; CHECK-NEXT:    csrr a7, vlenb
3608; CHECK-NEXT:    slli a7, a7, 3
3609; CHECK-NEXT:    add a7, sp, a7
3610; CHECK-NEXT:    addi a7, a7, 16
3611; CHECK-NEXT:    vs8r.v v8, (a7) # Unknown-size Folded Spill
3612; CHECK-NEXT:    sltu a7, a4, a6
3613; CHECK-NEXT:    addi a7, a7, -1
3614; CHECK-NEXT:    vl8re64.v v8, (a5)
3615; CHECK-NEXT:    csrr a5, vlenb
3616; CHECK-NEXT:    slli a5, a5, 3
3617; CHECK-NEXT:    mv t0, a5
3618; CHECK-NEXT:    slli a5, a5, 2
3619; CHECK-NEXT:    add a5, a5, t0
3620; CHECK-NEXT:    add a5, sp, a5
3621; CHECK-NEXT:    addi a5, a5, 16
3622; CHECK-NEXT:    vs8r.v v8, (a5) # Unknown-size Folded Spill
3623; CHECK-NEXT:    vl8re64.v v8, (a2)
3624; CHECK-NEXT:    csrr a2, vlenb
3625; CHECK-NEXT:    slli a2, a2, 4
3626; CHECK-NEXT:    add a2, sp, a2
3627; CHECK-NEXT:    addi a2, a2, 16
3628; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
3629; CHECK-NEXT:    vl8re64.v v8, (a0)
3630; CHECK-NEXT:    addi a0, sp, 16
3631; CHECK-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
3632; CHECK-NEXT:    vslidedown.vx v0, v0, a3
3633; CHECK-NEXT:    and a0, a7, a6
3634; CHECK-NEXT:    csrr a2, vlenb
3635; CHECK-NEXT:    slli a2, a2, 3
3636; CHECK-NEXT:    mv a3, a2
3637; CHECK-NEXT:    slli a2, a2, 1
3638; CHECK-NEXT:    add a2, a2, a3
3639; CHECK-NEXT:    add a2, sp, a2
3640; CHECK-NEXT:    addi a2, a2, 16
3641; CHECK-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
3642; CHECK-NEXT:    csrr a2, vlenb
3643; CHECK-NEXT:    slli a2, a2, 3
3644; CHECK-NEXT:    add a2, sp, a2
3645; CHECK-NEXT:    addi a2, a2, 16
3646; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
3647; CHECK-NEXT:    csrr a2, vlenb
3648; CHECK-NEXT:    slli a2, a2, 3
3649; CHECK-NEXT:    mv a3, a2
3650; CHECK-NEXT:    slli a2, a2, 2
3651; CHECK-NEXT:    add a2, a2, a3
3652; CHECK-NEXT:    add a2, sp, a2
3653; CHECK-NEXT:    addi a2, a2, 16
3654; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
3655; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
3656; CHECK-NEXT:    vfmadd.vv v8, v24, v16, v0.t
3657; CHECK-NEXT:    csrr a0, vlenb
3658; CHECK-NEXT:    slli a0, a0, 3
3659; CHECK-NEXT:    mv a2, a0
3660; CHECK-NEXT:    slli a0, a0, 2
3661; CHECK-NEXT:    add a0, a0, a2
3662; CHECK-NEXT:    add a0, sp, a0
3663; CHECK-NEXT:    addi a0, a0, 16
3664; CHECK-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
3665; CHECK-NEXT:    bltu a4, a1, .LBB128_2
3666; CHECK-NEXT:  # %bb.1:
3667; CHECK-NEXT:    mv a4, a1
3668; CHECK-NEXT:  .LBB128_2:
3669; CHECK-NEXT:    vmv1r.v v0, v7
3670; CHECK-NEXT:    csrr a0, vlenb
3671; CHECK-NEXT:    slli a0, a0, 5
3672; CHECK-NEXT:    add a0, sp, a0
3673; CHECK-NEXT:    addi a0, a0, 16
3674; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
3675; CHECK-NEXT:    csrr a0, vlenb
3676; CHECK-NEXT:    slli a0, a0, 4
3677; CHECK-NEXT:    add a0, sp, a0
3678; CHECK-NEXT:    addi a0, a0, 16
3679; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
3680; CHECK-NEXT:    addi a0, sp, 16
3681; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
3682; CHECK-NEXT:    vsetvli zero, a4, e64, m8, ta, ma
3683; CHECK-NEXT:    vfmadd.vv v8, v24, v16, v0.t
3684; CHECK-NEXT:    csrr a0, vlenb
3685; CHECK-NEXT:    slli a0, a0, 3
3686; CHECK-NEXT:    mv a1, a0
3687; CHECK-NEXT:    slli a0, a0, 2
3688; CHECK-NEXT:    add a0, a0, a1
3689; CHECK-NEXT:    add a0, sp, a0
3690; CHECK-NEXT:    addi a0, a0, 16
3691; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
3692; CHECK-NEXT:    csrr a0, vlenb
3693; CHECK-NEXT:    slli a0, a0, 4
3694; CHECK-NEXT:    mv a1, a0
3695; CHECK-NEXT:    slli a0, a0, 1
3696; CHECK-NEXT:    add a0, a0, a1
3697; CHECK-NEXT:    add sp, sp, a0
3698; CHECK-NEXT:    .cfi_def_cfa sp, 16
3699; CHECK-NEXT:    addi sp, sp, 16
3700; CHECK-NEXT:    .cfi_def_cfa_offset 0
3701; CHECK-NEXT:    ret
3702  %v = call <vscale x 16 x double> @llvm.vp.fma.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, <vscale x 16 x i1> %m, i32 %evl)
3703  ret <vscale x 16 x double> %v
3704}
3705
3706define <vscale x 16 x double> @vfma_vv_nxv16f64_unmasked(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, i32 zeroext %evl) {
3707; CHECK-LABEL: vfma_vv_nxv16f64_unmasked:
3708; CHECK:       # %bb.0:
3709; CHECK-NEXT:    addi sp, sp, -16
3710; CHECK-NEXT:    .cfi_def_cfa_offset 16
3711; CHECK-NEXT:    csrr a1, vlenb
3712; CHECK-NEXT:    slli a1, a1, 5
3713; CHECK-NEXT:    sub sp, sp, a1
3714; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
3715; CHECK-NEXT:    csrr a1, vlenb
3716; CHECK-NEXT:    slli a1, a1, 4
3717; CHECK-NEXT:    add a1, sp, a1
3718; CHECK-NEXT:    addi a1, a1, 16
3719; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
3720; CHECK-NEXT:    csrr a1, vlenb
3721; CHECK-NEXT:    slli a1, a1, 3
3722; CHECK-NEXT:    mv a3, a1
3723; CHECK-NEXT:    slli a1, a1, 1
3724; CHECK-NEXT:    add a1, a1, a3
3725; CHECK-NEXT:    add a1, sp, a1
3726; CHECK-NEXT:    addi a1, a1, 16
3727; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
3728; CHECK-NEXT:    csrr a1, vlenb
3729; CHECK-NEXT:    slli a3, a1, 3
3730; CHECK-NEXT:    add a5, a2, a3
3731; CHECK-NEXT:    vl8re64.v v8, (a5)
3732; CHECK-NEXT:    csrr a5, vlenb
3733; CHECK-NEXT:    slli a5, a5, 3
3734; CHECK-NEXT:    add a5, sp, a5
3735; CHECK-NEXT:    addi a5, a5, 16
3736; CHECK-NEXT:    vs8r.v v8, (a5) # Unknown-size Folded Spill
3737; CHECK-NEXT:    sub a5, a4, a1
3738; CHECK-NEXT:    add a3, a0, a3
3739; CHECK-NEXT:    vl8re64.v v24, (a3)
3740; CHECK-NEXT:    sltu a3, a4, a5
3741; CHECK-NEXT:    vl8re64.v v8, (a2)
3742; CHECK-NEXT:    addi a2, sp, 16
3743; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
3744; CHECK-NEXT:    vl8re64.v v0, (a0)
3745; CHECK-NEXT:    addi a3, a3, -1
3746; CHECK-NEXT:    and a3, a3, a5
3747; CHECK-NEXT:    csrr a0, vlenb
3748; CHECK-NEXT:    slli a0, a0, 4
3749; CHECK-NEXT:    add a0, sp, a0
3750; CHECK-NEXT:    addi a0, a0, 16
3751; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
3752; CHECK-NEXT:    csrr a0, vlenb
3753; CHECK-NEXT:    slli a0, a0, 3
3754; CHECK-NEXT:    add a0, sp, a0
3755; CHECK-NEXT:    addi a0, a0, 16
3756; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
3757; CHECK-NEXT:    vsetvli zero, a3, e64, m8, ta, ma
3758; CHECK-NEXT:    vfmadd.vv v24, v16, v8
3759; CHECK-NEXT:    bltu a4, a1, .LBB129_2
3760; CHECK-NEXT:  # %bb.1:
3761; CHECK-NEXT:    mv a4, a1
3762; CHECK-NEXT:  .LBB129_2:
3763; CHECK-NEXT:    csrr a0, vlenb
3764; CHECK-NEXT:    slli a0, a0, 3
3765; CHECK-NEXT:    mv a1, a0
3766; CHECK-NEXT:    slli a0, a0, 1
3767; CHECK-NEXT:    add a0, a0, a1
3768; CHECK-NEXT:    add a0, sp, a0
3769; CHECK-NEXT:    addi a0, a0, 16
3770; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
3771; CHECK-NEXT:    addi a0, sp, 16
3772; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
3773; CHECK-NEXT:    vsetvli zero, a4, e64, m8, ta, ma
3774; CHECK-NEXT:    vfmadd.vv v0, v16, v8
3775; CHECK-NEXT:    vmv.v.v v8, v0
3776; CHECK-NEXT:    vmv8r.v v16, v24
3777; CHECK-NEXT:    csrr a0, vlenb
3778; CHECK-NEXT:    slli a0, a0, 5
3779; CHECK-NEXT:    add sp, sp, a0
3780; CHECK-NEXT:    .cfi_def_cfa sp, 16
3781; CHECK-NEXT:    addi sp, sp, 16
3782; CHECK-NEXT:    .cfi_def_cfa_offset 0
3783; CHECK-NEXT:    ret
3784  %v = call <vscale x 16 x double> @llvm.vp.fma.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
3785  ret <vscale x 16 x double> %v
3786}
3787
3788declare <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
3789
3790define <vscale x 1 x half> @vfmsub_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
3791; ZVFH-LABEL: vfmsub_vv_nxv1f16:
3792; ZVFH:       # %bb.0:
3793; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3794; ZVFH-NEXT:    vfmsub.vv v9, v8, v10, v0.t
3795; ZVFH-NEXT:    vmv1r.v v8, v9
3796; ZVFH-NEXT:    ret
3797;
3798; ZVFHMIN-LABEL: vfmsub_vv_nxv1f16:
3799; ZVFHMIN:       # %bb.0:
3800; ZVFHMIN-NEXT:    lui a1, 8
3801; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3802; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
3803; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
3804; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
3805; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
3806; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3807; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11, v0.t
3808; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
3809; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
3810; ZVFHMIN-NEXT:    ret
3811  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
3812  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
3813  ret <vscale x 1 x half> %v
3814}
3815
3816define <vscale x 1 x half> @vfmsub_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) {
3817; ZVFH-LABEL: vfmsub_vv_nxv1f16_unmasked:
3818; ZVFH:       # %bb.0:
3819; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3820; ZVFH-NEXT:    vfmsub.vv v8, v9, v10
3821; ZVFH-NEXT:    ret
3822;
3823; ZVFHMIN-LABEL: vfmsub_vv_nxv1f16_unmasked:
3824; ZVFHMIN:       # %bb.0:
3825; ZVFHMIN-NEXT:    lui a1, 8
3826; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3827; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
3828; ZVFHMIN-NEXT:    vxor.vx v8, v10, a1
3829; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
3830; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
3831; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3832; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10
3833; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
3834; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
3835; ZVFHMIN-NEXT:    ret
3836  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3837  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3838  ret <vscale x 1 x half> %v
3839}
3840
3841define <vscale x 1 x half> @vfmsub_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
3842; ZVFH-LABEL: vfmsub_vf_nxv1f16:
3843; ZVFH:       # %bb.0:
3844; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3845; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
3846; ZVFH-NEXT:    ret
3847;
3848; ZVFHMIN-LABEL: vfmsub_vf_nxv1f16:
3849; ZVFHMIN:       # %bb.0:
3850; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
3851; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3852; ZVFHMIN-NEXT:    vmv.v.x v10, a1
3853; ZVFHMIN-NEXT:    lui a0, 8
3854; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
3855; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
3856; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
3857; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
3858; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3859; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11, v0.t
3860; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
3861; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
3862; ZVFHMIN-NEXT:    ret
3863  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
3864  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
3865  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
3866  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
3867  ret <vscale x 1 x half> %v
3868}
3869
3870define <vscale x 1 x half> @vfmsub_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
3871; ZVFH-LABEL: vfmsub_vf_nxv1f16_commute:
3872; ZVFH:       # %bb.0:
3873; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3874; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
3875; ZVFH-NEXT:    ret
3876;
3877; ZVFHMIN-LABEL: vfmsub_vf_nxv1f16_commute:
3878; ZVFHMIN:       # %bb.0:
3879; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
3880; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3881; ZVFHMIN-NEXT:    vmv.v.x v10, a1
3882; ZVFHMIN-NEXT:    lui a0, 8
3883; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
3884; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
3885; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
3886; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
3887; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3888; ZVFHMIN-NEXT:    vfmadd.vv v9, v8, v11, v0.t
3889; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
3890; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
3891; ZVFHMIN-NEXT:    ret
3892  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
3893  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
3894  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
3895  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
3896  ret <vscale x 1 x half> %v
3897}
3898
3899define <vscale x 1 x half> @vfmsub_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
3900; ZVFH-LABEL: vfmsub_vf_nxv1f16_unmasked:
3901; ZVFH:       # %bb.0:
3902; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3903; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9
3904; ZVFH-NEXT:    ret
3905;
3906; ZVFHMIN-LABEL: vfmsub_vf_nxv1f16_unmasked:
3907; ZVFHMIN:       # %bb.0:
3908; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
3909; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3910; ZVFHMIN-NEXT:    vmv.v.x v10, a1
3911; ZVFHMIN-NEXT:    lui a0, 8
3912; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
3913; ZVFHMIN-NEXT:    vxor.vx v8, v9, a0
3914; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
3915; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
3916; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3917; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v9
3918; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
3919; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
3920; ZVFHMIN-NEXT:    ret
3921  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
3922  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
3923  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3924  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3925  ret <vscale x 1 x half> %v
3926}
3927
3928define <vscale x 1 x half> @vfmsub_vf_nxv1f16_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
3929; ZVFH-LABEL: vfmsub_vf_nxv1f16_unmasked_commute:
3930; ZVFH:       # %bb.0:
3931; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3932; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9
3933; ZVFH-NEXT:    ret
3934;
3935; ZVFHMIN-LABEL: vfmsub_vf_nxv1f16_unmasked_commute:
3936; ZVFHMIN:       # %bb.0:
3937; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
3938; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3939; ZVFHMIN-NEXT:    vmv.v.x v10, a1
3940; ZVFHMIN-NEXT:    lui a0, 8
3941; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
3942; ZVFHMIN-NEXT:    vxor.vx v8, v9, a0
3943; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
3944; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
3945; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3946; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v9
3947; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
3948; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
3949; ZVFHMIN-NEXT:    ret
3950  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
3951  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
3952  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3953  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
3954  ret <vscale x 1 x half> %v
3955}
3956
3957define <vscale x 1 x half> @vfnmadd_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
3958; ZVFH-LABEL: vfnmadd_vv_nxv1f16:
3959; ZVFH:       # %bb.0:
3960; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3961; ZVFH-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
3962; ZVFH-NEXT:    vmv1r.v v8, v9
3963; ZVFH-NEXT:    ret
3964;
3965; ZVFHMIN-LABEL: vfnmadd_vv_nxv1f16:
3966; ZVFHMIN:       # %bb.0:
3967; ZVFHMIN-NEXT:    lui a1, 8
3968; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3969; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
3970; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
3971; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
3972; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
3973; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
3974; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
3975; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11, v0.t
3976; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
3977; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
3978; ZVFHMIN-NEXT:    ret
3979  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
3980  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
3981  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
3982  ret <vscale x 1 x half> %v
3983}
3984
3985define <vscale x 1 x half> @vfnmadd_vv_nxv1f16_commuted(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
3986; ZVFH-LABEL: vfnmadd_vv_nxv1f16_commuted:
3987; ZVFH:       # %bb.0:
3988; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3989; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
3990; ZVFH-NEXT:    ret
3991;
3992; ZVFHMIN-LABEL: vfnmadd_vv_nxv1f16_commuted:
3993; ZVFHMIN:       # %bb.0:
3994; ZVFHMIN-NEXT:    lui a1, 8
3995; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3996; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
3997; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
3998; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
3999; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
4000; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4001; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4002; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11, v0.t
4003; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4004; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4005; ZVFHMIN-NEXT:    ret
4006  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
4007  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
4008  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
4009  ret <vscale x 1 x half> %v
4010}
4011
4012define <vscale x 1 x half> @vfnmadd_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) {
4013; ZVFH-LABEL: vfnmadd_vv_nxv1f16_unmasked:
4014; ZVFH:       # %bb.0:
4015; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4016; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
4017; ZVFH-NEXT:    ret
4018;
4019; ZVFHMIN-LABEL: vfnmadd_vv_nxv1f16_unmasked:
4020; ZVFHMIN:       # %bb.0:
4021; ZVFHMIN-NEXT:    lui a1, 8
4022; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4023; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
4024; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
4025; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
4026; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
4027; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4028; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4029; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
4030; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4031; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
4032; ZVFHMIN-NEXT:    ret
4033  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4034  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4035  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4036  ret <vscale x 1 x half> %v
4037}
4038
4039define <vscale x 1 x half> @vfnmadd_vv_nxv1f16_unmasked_commuted(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) {
4040; ZVFH-LABEL: vfnmadd_vv_nxv1f16_unmasked_commuted:
4041; ZVFH:       # %bb.0:
4042; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4043; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
4044; ZVFH-NEXT:    ret
4045;
4046; ZVFHMIN-LABEL: vfnmadd_vv_nxv1f16_unmasked_commuted:
4047; ZVFHMIN:       # %bb.0:
4048; ZVFHMIN-NEXT:    lui a1, 8
4049; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4050; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
4051; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
4052; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
4053; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
4054; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4055; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4056; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
4057; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4058; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
4059; ZVFHMIN-NEXT:    ret
4060  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4061  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4062  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4063  ret <vscale x 1 x half> %v
4064}
4065
4066define <vscale x 1 x half> @vfnmadd_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4067; ZVFH-LABEL: vfnmadd_vf_nxv1f16:
4068; ZVFH:       # %bb.0:
4069; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4070; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4071; ZVFH-NEXT:    ret
4072;
4073; ZVFHMIN-LABEL: vfnmadd_vf_nxv1f16:
4074; ZVFHMIN:       # %bb.0:
4075; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4076; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4077; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4078; ZVFHMIN-NEXT:    lui a0, 8
4079; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
4080; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
4081; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
4082; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4083; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
4084; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4085; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11, v0.t
4086; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4087; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
4088; ZVFHMIN-NEXT:    ret
4089  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4090  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4091  %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl)
4092  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
4093  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
4094  ret <vscale x 1 x half> %v
4095}
4096
4097define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4098; ZVFH-LABEL: vfnmadd_vf_nxv1f16_commute:
4099; ZVFH:       # %bb.0:
4100; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4101; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4102; ZVFH-NEXT:    ret
4103;
4104; ZVFHMIN-LABEL: vfnmadd_vf_nxv1f16_commute:
4105; ZVFHMIN:       # %bb.0:
4106; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4107; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4108; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4109; ZVFHMIN-NEXT:    lui a0, 8
4110; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
4111; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
4112; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
4113; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4114; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
4115; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4116; ZVFHMIN-NEXT:    vfmadd.vv v9, v8, v11, v0.t
4117; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4118; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4119; ZVFHMIN-NEXT:    ret
4120  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4121  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4122  %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl)
4123  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
4124  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
4125  ret <vscale x 1 x half> %v
4126}
4127
4128define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
4129; ZVFH-LABEL: vfnmadd_vf_nxv1f16_unmasked:
4130; ZVFH:       # %bb.0:
4131; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4132; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
4133; ZVFH-NEXT:    ret
4134;
4135; ZVFHMIN-LABEL: vfnmadd_vf_nxv1f16_unmasked:
4136; ZVFHMIN:       # %bb.0:
4137; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4138; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4139; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4140; ZVFHMIN-NEXT:    lui a0, 8
4141; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
4142; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
4143; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
4144; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4145; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
4146; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4147; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11
4148; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4149; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
4150; ZVFHMIN-NEXT:    ret
4151  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4152  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4153  %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4154  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4155  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4156  ret <vscale x 1 x half> %v
4157}
4158
4159define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
4160; ZVFH-LABEL: vfnmadd_vf_nxv1f16_unmasked_commute:
4161; ZVFH:       # %bb.0:
4162; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4163; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
4164; ZVFH-NEXT:    ret
4165;
4166; ZVFHMIN-LABEL: vfnmadd_vf_nxv1f16_unmasked_commute:
4167; ZVFHMIN:       # %bb.0:
4168; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4169; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4170; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4171; ZVFHMIN-NEXT:    lui a0, 8
4172; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
4173; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
4174; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
4175; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4176; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
4177; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4178; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11
4179; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4180; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
4181; ZVFHMIN-NEXT:    ret
4182  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4183  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4184  %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4185  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4186  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4187  ret <vscale x 1 x half> %v
4188}
4189
4190define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_neg_splat(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4191; ZVFH-LABEL: vfnmadd_vf_nxv1f16_neg_splat:
4192; ZVFH:       # %bb.0:
4193; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4194; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4195; ZVFH-NEXT:    ret
4196;
4197; ZVFHMIN-LABEL: vfnmadd_vf_nxv1f16_neg_splat:
4198; ZVFHMIN:       # %bb.0:
4199; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4200; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4201; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4202; ZVFHMIN-NEXT:    lui a0, 8
4203; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
4204; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
4205; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
4206; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10, v0.t
4207; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
4208; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4209; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11, v0.t
4210; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4211; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4212; ZVFHMIN-NEXT:    ret
4213  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4214  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4215  %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
4216  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
4217  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
4218  ret <vscale x 1 x half> %v
4219}
4220
4221define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_neg_splat_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4222; ZVFH-LABEL: vfnmadd_vf_nxv1f16_neg_splat_commute:
4223; ZVFH:       # %bb.0:
4224; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4225; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4226; ZVFH-NEXT:    ret
4227;
4228; ZVFHMIN-LABEL: vfnmadd_vf_nxv1f16_neg_splat_commute:
4229; ZVFHMIN:       # %bb.0:
4230; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4231; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4232; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4233; ZVFHMIN-NEXT:    lui a0, 8
4234; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
4235; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
4236; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
4237; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10, v0.t
4238; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
4239; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4240; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11, v0.t
4241; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4242; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
4243; ZVFHMIN-NEXT:    ret
4244  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4245  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4246  %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
4247  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
4248  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
4249  ret <vscale x 1 x half> %v
4250}
4251
4252define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_neg_splat_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
4253; ZVFH-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked:
4254; ZVFH:       # %bb.0:
4255; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4256; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
4257; ZVFH-NEXT:    ret
4258;
4259; ZVFHMIN-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked:
4260; ZVFHMIN:       # %bb.0:
4261; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4262; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4263; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4264; ZVFHMIN-NEXT:    lui a0, 8
4265; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
4266; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
4267; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
4268; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10
4269; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
4270; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4271; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11
4272; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4273; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
4274; ZVFHMIN-NEXT:    ret
4275  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4276  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4277  %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4278  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4279  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4280  ret <vscale x 1 x half> %v
4281}
4282
4283define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_neg_splat_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
4284; ZVFH-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked_commute:
4285; ZVFH:       # %bb.0:
4286; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4287; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
4288; ZVFH-NEXT:    ret
4289;
4290; ZVFHMIN-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked_commute:
4291; ZVFHMIN:       # %bb.0:
4292; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4293; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4294; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4295; ZVFHMIN-NEXT:    lui a0, 8
4296; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
4297; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
4298; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
4299; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10
4300; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
4301; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4302; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11
4303; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4304; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
4305; ZVFHMIN-NEXT:    ret
4306  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4307  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4308  %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4309  %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4310  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4311  ret <vscale x 1 x half> %v
4312}
4313
4314define <vscale x 1 x half> @vfnmsub_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4315; ZVFH-LABEL: vfnmsub_vv_nxv1f16:
4316; ZVFH:       # %bb.0:
4317; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4318; ZVFH-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
4319; ZVFH-NEXT:    vmv1r.v v8, v9
4320; ZVFH-NEXT:    ret
4321;
4322; ZVFHMIN-LABEL: vfnmsub_vv_nxv1f16:
4323; ZVFHMIN:       # %bb.0:
4324; ZVFHMIN-NEXT:    lui a1, 8
4325; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4326; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
4327; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
4328; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
4329; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
4330; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4331; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4332; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11, v0.t
4333; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4334; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
4335; ZVFHMIN-NEXT:    ret
4336  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
4337  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
4338  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
4339  ret <vscale x 1 x half> %v
4340}
4341
4342define <vscale x 1 x half> @vfnmsub_vv_nxv1f16_commuted(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4343; ZVFH-LABEL: vfnmsub_vv_nxv1f16_commuted:
4344; ZVFH:       # %bb.0:
4345; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4346; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4347; ZVFH-NEXT:    ret
4348;
4349; ZVFHMIN-LABEL: vfnmsub_vv_nxv1f16_commuted:
4350; ZVFHMIN:       # %bb.0:
4351; ZVFHMIN-NEXT:    lui a1, 8
4352; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4353; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
4354; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
4355; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
4356; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
4357; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4358; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4359; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11, v0.t
4360; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4361; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4362; ZVFHMIN-NEXT:    ret
4363  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
4364  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
4365  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
4366  ret <vscale x 1 x half> %v
4367}
4368
4369define <vscale x 1 x half> @vfnmsub_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) {
4370; ZVFH-LABEL: vfnmsub_vv_nxv1f16_unmasked:
4371; ZVFH:       # %bb.0:
4372; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4373; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
4374; ZVFH-NEXT:    ret
4375;
4376; ZVFHMIN-LABEL: vfnmsub_vv_nxv1f16_unmasked:
4377; ZVFHMIN:       # %bb.0:
4378; ZVFHMIN-NEXT:    lui a1, 8
4379; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4380; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
4381; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
4382; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
4383; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
4384; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4385; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4386; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
4387; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4388; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
4389; ZVFHMIN-NEXT:    ret
4390  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4391  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4392  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4393  ret <vscale x 1 x half> %v
4394}
4395
4396define <vscale x 1 x half> @vfnmsub_vv_nxv1f16_unmasked_commuted(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) {
4397; ZVFH-LABEL: vfnmsub_vv_nxv1f16_unmasked_commuted:
4398; ZVFH:       # %bb.0:
4399; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4400; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
4401; ZVFH-NEXT:    ret
4402;
4403; ZVFHMIN-LABEL: vfnmsub_vv_nxv1f16_unmasked_commuted:
4404; ZVFHMIN:       # %bb.0:
4405; ZVFHMIN-NEXT:    lui a1, 8
4406; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4407; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
4408; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
4409; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
4410; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
4411; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4412; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4413; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
4414; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4415; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
4416; ZVFHMIN-NEXT:    ret
4417  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4418  %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4419  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4420  ret <vscale x 1 x half> %v
4421}
4422
4423define <vscale x 1 x half> @vfnmsub_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4424; ZVFH-LABEL: vfnmsub_vf_nxv1f16:
4425; ZVFH:       # %bb.0:
4426; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4427; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4428; ZVFH-NEXT:    ret
4429;
4430; ZVFHMIN-LABEL: vfnmsub_vf_nxv1f16:
4431; ZVFHMIN:       # %bb.0:
4432; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4433; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4434; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4435; ZVFHMIN-NEXT:    lui a0, 8
4436; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
4437; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
4438; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
4439; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10, v0.t
4440; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4441; ZVFHMIN-NEXT:    vfmadd.vv v9, v11, v8, v0.t
4442; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4443; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4444; ZVFHMIN-NEXT:    ret
4445  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4446  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4447  %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl)
4448  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
4449  ret <vscale x 1 x half> %v
4450}
4451
4452define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4453; ZVFH-LABEL: vfnmsub_vf_nxv1f16_commute:
4454; ZVFH:       # %bb.0:
4455; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4456; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4457; ZVFH-NEXT:    ret
4458;
4459; ZVFHMIN-LABEL: vfnmsub_vf_nxv1f16_commute:
4460; ZVFHMIN:       # %bb.0:
4461; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4462; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4463; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4464; ZVFHMIN-NEXT:    lui a0, 8
4465; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
4466; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
4467; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
4468; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10, v0.t
4469; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4470; ZVFHMIN-NEXT:    vfmadd.vv v11, v9, v8, v0.t
4471; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4472; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v11, v0.t
4473; ZVFHMIN-NEXT:    ret
4474  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4475  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4476  %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl)
4477  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
4478  ret <vscale x 1 x half> %v
4479}
4480
4481define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
4482; ZVFH-LABEL: vfnmsub_vf_nxv1f16_unmasked:
4483; ZVFH:       # %bb.0:
4484; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4485; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
4486; ZVFH-NEXT:    ret
4487;
4488; ZVFHMIN-LABEL: vfnmsub_vf_nxv1f16_unmasked:
4489; ZVFHMIN:       # %bb.0:
4490; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4491; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4492; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4493; ZVFHMIN-NEXT:    lui a0, 8
4494; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
4495; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
4496; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4497; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
4498; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4499; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11
4500; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4501; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
4502; ZVFHMIN-NEXT:    ret
4503  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4504  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4505  %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4506  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4507  ret <vscale x 1 x half> %v
4508}
4509
4510define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
4511; ZVFH-LABEL: vfnmsub_vf_nxv1f16_unmasked_commute:
4512; ZVFH:       # %bb.0:
4513; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4514; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
4515; ZVFH-NEXT:    ret
4516;
4517; ZVFHMIN-LABEL: vfnmsub_vf_nxv1f16_unmasked_commute:
4518; ZVFHMIN:       # %bb.0:
4519; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4520; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4521; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4522; ZVFHMIN-NEXT:    lui a0, 8
4523; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
4524; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
4525; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4526; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
4527; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4528; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11
4529; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4530; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
4531; ZVFHMIN-NEXT:    ret
4532  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4533  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4534  %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4535  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4536  ret <vscale x 1 x half> %v
4537}
4538
4539define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_neg_splat(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4540; ZVFH-LABEL: vfnmsub_vf_nxv1f16_neg_splat:
4541; ZVFH:       # %bb.0:
4542; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4543; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4544; ZVFH-NEXT:    ret
4545;
4546; ZVFHMIN-LABEL: vfnmsub_vf_nxv1f16_neg_splat:
4547; ZVFHMIN:       # %bb.0:
4548; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4549; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4550; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4551; ZVFHMIN-NEXT:    lui a0, 8
4552; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
4553; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
4554; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
4555; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4556; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4557; ZVFHMIN-NEXT:    vfmadd.vv v11, v9, v10, v0.t
4558; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4559; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v11, v0.t
4560; ZVFHMIN-NEXT:    ret
4561  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4562  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4563  %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
4564  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
4565  ret <vscale x 1 x half> %v
4566}
4567
4568define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_neg_splat_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
4569; ZVFH-LABEL: vfnmsub_vf_nxv1f16_neg_splat_commute:
4570; ZVFH:       # %bb.0:
4571; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4572; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4573; ZVFH-NEXT:    ret
4574;
4575; ZVFHMIN-LABEL: vfnmsub_vf_nxv1f16_neg_splat_commute:
4576; ZVFHMIN:       # %bb.0:
4577; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4578; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4579; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4580; ZVFHMIN-NEXT:    lui a0, 8
4581; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
4582; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
4583; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
4584; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4585; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4586; ZVFHMIN-NEXT:    vfmadd.vv v9, v11, v10, v0.t
4587; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4588; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4589; ZVFHMIN-NEXT:    ret
4590  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4591  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4592  %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
4593  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
4594  ret <vscale x 1 x half> %v
4595}
4596
4597define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_neg_splat_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
4598; ZVFH-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked:
4599; ZVFH:       # %bb.0:
4600; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4601; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
4602; ZVFH-NEXT:    ret
4603;
4604; ZVFHMIN-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked:
4605; ZVFHMIN:       # %bb.0:
4606; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4607; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4608; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4609; ZVFHMIN-NEXT:    lui a0, 8
4610; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
4611; ZVFHMIN-NEXT:    vxor.vx v9, v10, a0
4612; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
4613; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4614; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4615; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
4616; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4617; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
4618; ZVFHMIN-NEXT:    ret
4619  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4620  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4621  %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4622  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4623  ret <vscale x 1 x half> %v
4624}
4625
4626define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_neg_splat_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) {
4627; ZVFH-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked_commute:
4628; ZVFH:       # %bb.0:
4629; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4630; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
4631; ZVFH-NEXT:    ret
4632;
4633; ZVFHMIN-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked_commute:
4634; ZVFHMIN:       # %bb.0:
4635; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4636; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4637; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4638; ZVFHMIN-NEXT:    lui a0, 8
4639; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
4640; ZVFHMIN-NEXT:    vxor.vx v9, v10, a0
4641; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
4642; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4643; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
4644; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
4645; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
4646; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
4647; ZVFHMIN-NEXT:    ret
4648  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
4649  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
4650  %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4651  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
4652  ret <vscale x 1 x half> %v
4653}
4654
4655declare <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
4656
4657define <vscale x 2 x half> @vfmsub_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
4658; ZVFH-LABEL: vfmsub_vv_nxv2f16:
4659; ZVFH:       # %bb.0:
4660; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4661; ZVFH-NEXT:    vfmsub.vv v9, v8, v10, v0.t
4662; ZVFH-NEXT:    vmv1r.v v8, v9
4663; ZVFH-NEXT:    ret
4664;
4665; ZVFHMIN-LABEL: vfmsub_vv_nxv2f16:
4666; ZVFHMIN:       # %bb.0:
4667; ZVFHMIN-NEXT:    lui a1, 8
4668; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4669; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
4670; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
4671; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
4672; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
4673; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4674; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11, v0.t
4675; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4676; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
4677; ZVFHMIN-NEXT:    ret
4678  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl)
4679  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
4680  ret <vscale x 2 x half> %v
4681}
4682
4683define <vscale x 2 x half> @vfmsub_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) {
4684; ZVFH-LABEL: vfmsub_vv_nxv2f16_unmasked:
4685; ZVFH:       # %bb.0:
4686; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4687; ZVFH-NEXT:    vfmsub.vv v8, v9, v10
4688; ZVFH-NEXT:    ret
4689;
4690; ZVFHMIN-LABEL: vfmsub_vv_nxv2f16_unmasked:
4691; ZVFHMIN:       # %bb.0:
4692; ZVFHMIN-NEXT:    lui a1, 8
4693; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4694; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
4695; ZVFHMIN-NEXT:    vxor.vx v8, v10, a1
4696; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
4697; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
4698; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4699; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10
4700; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4701; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
4702; ZVFHMIN-NEXT:    ret
4703  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4704  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4705  ret <vscale x 2 x half> %v
4706}
4707
4708define <vscale x 2 x half> @vfmsub_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
4709; ZVFH-LABEL: vfmsub_vf_nxv2f16:
4710; ZVFH:       # %bb.0:
4711; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4712; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
4713; ZVFH-NEXT:    ret
4714;
4715; ZVFHMIN-LABEL: vfmsub_vf_nxv2f16:
4716; ZVFHMIN:       # %bb.0:
4717; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4718; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4719; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4720; ZVFHMIN-NEXT:    lui a0, 8
4721; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
4722; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
4723; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4724; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
4725; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4726; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11, v0.t
4727; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4728; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
4729; ZVFHMIN-NEXT:    ret
4730  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
4731  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
4732  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
4733  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
4734  ret <vscale x 2 x half> %v
4735}
4736
4737define <vscale x 2 x half> @vfmsub_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
4738; ZVFH-LABEL: vfmsub_vf_nxv2f16_commute:
4739; ZVFH:       # %bb.0:
4740; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4741; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
4742; ZVFH-NEXT:    ret
4743;
4744; ZVFHMIN-LABEL: vfmsub_vf_nxv2f16_commute:
4745; ZVFHMIN:       # %bb.0:
4746; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4747; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4748; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4749; ZVFHMIN-NEXT:    lui a0, 8
4750; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
4751; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
4752; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4753; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
4754; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4755; ZVFHMIN-NEXT:    vfmadd.vv v9, v8, v11, v0.t
4756; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4757; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4758; ZVFHMIN-NEXT:    ret
4759  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
4760  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
4761  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
4762  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
4763  ret <vscale x 2 x half> %v
4764}
4765
4766define <vscale x 2 x half> @vfmsub_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
4767; ZVFH-LABEL: vfmsub_vf_nxv2f16_unmasked:
4768; ZVFH:       # %bb.0:
4769; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4770; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9
4771; ZVFH-NEXT:    ret
4772;
4773; ZVFHMIN-LABEL: vfmsub_vf_nxv2f16_unmasked:
4774; ZVFHMIN:       # %bb.0:
4775; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4776; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4777; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4778; ZVFHMIN-NEXT:    lui a0, 8
4779; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
4780; ZVFHMIN-NEXT:    vxor.vx v8, v9, a0
4781; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4782; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
4783; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4784; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v9
4785; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4786; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
4787; ZVFHMIN-NEXT:    ret
4788  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
4789  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
4790  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4791  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4792  ret <vscale x 2 x half> %v
4793}
4794
4795define <vscale x 2 x half> @vfmsub_vf_nxv2f16_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
4796; ZVFH-LABEL: vfmsub_vf_nxv2f16_unmasked_commute:
4797; ZVFH:       # %bb.0:
4798; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4799; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9
4800; ZVFH-NEXT:    ret
4801;
4802; ZVFHMIN-LABEL: vfmsub_vf_nxv2f16_unmasked_commute:
4803; ZVFHMIN:       # %bb.0:
4804; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4805; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4806; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4807; ZVFHMIN-NEXT:    lui a0, 8
4808; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
4809; ZVFHMIN-NEXT:    vxor.vx v8, v9, a0
4810; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4811; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
4812; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4813; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v9
4814; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4815; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
4816; ZVFHMIN-NEXT:    ret
4817  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
4818  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
4819  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4820  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4821  ret <vscale x 2 x half> %v
4822}
4823
4824define <vscale x 2 x half> @vfnmadd_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
4825; ZVFH-LABEL: vfnmadd_vv_nxv2f16:
4826; ZVFH:       # %bb.0:
4827; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4828; ZVFH-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
4829; ZVFH-NEXT:    vmv1r.v v8, v9
4830; ZVFH-NEXT:    ret
4831;
4832; ZVFHMIN-LABEL: vfnmadd_vv_nxv2f16:
4833; ZVFHMIN:       # %bb.0:
4834; ZVFHMIN-NEXT:    lui a1, 8
4835; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4836; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
4837; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
4838; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
4839; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
4840; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4841; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4842; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11, v0.t
4843; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4844; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
4845; ZVFHMIN-NEXT:    ret
4846  %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
4847  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl)
4848  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
4849  ret <vscale x 2 x half> %v
4850}
4851
4852define <vscale x 2 x half> @vfnmadd_vv_nxv2f16_commuted(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
4853; ZVFH-LABEL: vfnmadd_vv_nxv2f16_commuted:
4854; ZVFH:       # %bb.0:
4855; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4856; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4857; ZVFH-NEXT:    ret
4858;
4859; ZVFHMIN-LABEL: vfnmadd_vv_nxv2f16_commuted:
4860; ZVFHMIN:       # %bb.0:
4861; ZVFHMIN-NEXT:    lui a1, 8
4862; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4863; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
4864; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
4865; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
4866; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
4867; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4868; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4869; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11, v0.t
4870; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4871; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4872; ZVFHMIN-NEXT:    ret
4873  %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
4874  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl)
4875  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
4876  ret <vscale x 2 x half> %v
4877}
4878
4879define <vscale x 2 x half> @vfnmadd_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) {
4880; ZVFH-LABEL: vfnmadd_vv_nxv2f16_unmasked:
4881; ZVFH:       # %bb.0:
4882; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4883; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
4884; ZVFH-NEXT:    ret
4885;
4886; ZVFHMIN-LABEL: vfnmadd_vv_nxv2f16_unmasked:
4887; ZVFHMIN:       # %bb.0:
4888; ZVFHMIN-NEXT:    lui a1, 8
4889; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4890; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
4891; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
4892; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
4893; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
4894; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4895; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4896; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
4897; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4898; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
4899; ZVFHMIN-NEXT:    ret
4900  %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4901  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4902  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4903  ret <vscale x 2 x half> %v
4904}
4905
4906define <vscale x 2 x half> @vfnmadd_vv_nxv2f16_unmasked_commuted(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) {
4907; ZVFH-LABEL: vfnmadd_vv_nxv2f16_unmasked_commuted:
4908; ZVFH:       # %bb.0:
4909; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4910; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
4911; ZVFH-NEXT:    ret
4912;
4913; ZVFHMIN-LABEL: vfnmadd_vv_nxv2f16_unmasked_commuted:
4914; ZVFHMIN:       # %bb.0:
4915; ZVFHMIN-NEXT:    lui a1, 8
4916; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4917; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
4918; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
4919; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
4920; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
4921; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
4922; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4923; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
4924; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4925; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
4926; ZVFHMIN-NEXT:    ret
4927  %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4928  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4929  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
4930  ret <vscale x 2 x half> %v
4931}
4932
4933define <vscale x 2 x half> @vfnmadd_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
4934; ZVFH-LABEL: vfnmadd_vf_nxv2f16:
4935; ZVFH:       # %bb.0:
4936; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4937; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4938; ZVFH-NEXT:    ret
4939;
4940; ZVFHMIN-LABEL: vfnmadd_vf_nxv2f16:
4941; ZVFHMIN:       # %bb.0:
4942; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4943; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4944; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4945; ZVFHMIN-NEXT:    lui a0, 8
4946; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
4947; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
4948; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
4949; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4950; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
4951; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4952; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11, v0.t
4953; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4954; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
4955; ZVFHMIN-NEXT:    ret
4956  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
4957  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
4958  %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
4959  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
4960  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
4961  ret <vscale x 2 x half> %v
4962}
4963
4964define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
4965; ZVFH-LABEL: vfnmadd_vf_nxv2f16_commute:
4966; ZVFH:       # %bb.0:
4967; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4968; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4969; ZVFH-NEXT:    ret
4970;
4971; ZVFHMIN-LABEL: vfnmadd_vf_nxv2f16_commute:
4972; ZVFHMIN:       # %bb.0:
4973; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
4974; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4975; ZVFHMIN-NEXT:    vmv.v.x v10, a1
4976; ZVFHMIN-NEXT:    lui a0, 8
4977; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
4978; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
4979; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
4980; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
4981; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
4982; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
4983; ZVFHMIN-NEXT:    vfmadd.vv v9, v8, v11, v0.t
4984; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
4985; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
4986; ZVFHMIN-NEXT:    ret
4987  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
4988  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
4989  %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
4990  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
4991  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
4992  ret <vscale x 2 x half> %v
4993}
4994
4995define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
4996; ZVFH-LABEL: vfnmadd_vf_nxv2f16_unmasked:
4997; ZVFH:       # %bb.0:
4998; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4999; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
5000; ZVFH-NEXT:    ret
5001;
5002; ZVFHMIN-LABEL: vfnmadd_vf_nxv2f16_unmasked:
5003; ZVFHMIN:       # %bb.0:
5004; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5005; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5006; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5007; ZVFHMIN-NEXT:    lui a0, 8
5008; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
5009; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
5010; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
5011; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
5012; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
5013; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5014; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11
5015; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5016; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
5017; ZVFHMIN-NEXT:    ret
5018  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5019  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5020  %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5021  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5022  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5023  ret <vscale x 2 x half> %v
5024}
5025
5026define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
5027; ZVFH-LABEL: vfnmadd_vf_nxv2f16_unmasked_commute:
5028; ZVFH:       # %bb.0:
5029; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5030; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
5031; ZVFH-NEXT:    ret
5032;
5033; ZVFHMIN-LABEL: vfnmadd_vf_nxv2f16_unmasked_commute:
5034; ZVFHMIN:       # %bb.0:
5035; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5036; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5037; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5038; ZVFHMIN-NEXT:    lui a0, 8
5039; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
5040; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
5041; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
5042; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
5043; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
5044; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5045; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11
5046; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5047; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
5048; ZVFHMIN-NEXT:    ret
5049  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5050  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5051  %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5052  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5053  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5054  ret <vscale x 2 x half> %v
5055}
5056
5057define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_neg_splat(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
5058; ZVFH-LABEL: vfnmadd_vf_nxv2f16_neg_splat:
5059; ZVFH:       # %bb.0:
5060; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5061; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5062; ZVFH-NEXT:    ret
5063;
5064; ZVFHMIN-LABEL: vfnmadd_vf_nxv2f16_neg_splat:
5065; ZVFHMIN:       # %bb.0:
5066; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5067; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5068; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5069; ZVFHMIN-NEXT:    lui a0, 8
5070; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
5071; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
5072; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
5073; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10, v0.t
5074; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
5075; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5076; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11, v0.t
5077; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5078; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
5079; ZVFHMIN-NEXT:    ret
5080  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5081  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5082  %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
5083  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
5084  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
5085  ret <vscale x 2 x half> %v
5086}
5087
5088define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_neg_splat_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
5089; ZVFH-LABEL: vfnmadd_vf_nxv2f16_neg_splat_commute:
5090; ZVFH:       # %bb.0:
5091; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5092; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5093; ZVFH-NEXT:    ret
5094;
5095; ZVFHMIN-LABEL: vfnmadd_vf_nxv2f16_neg_splat_commute:
5096; ZVFHMIN:       # %bb.0:
5097; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5098; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5099; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5100; ZVFHMIN-NEXT:    lui a0, 8
5101; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
5102; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
5103; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9, v0.t
5104; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10, v0.t
5105; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
5106; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5107; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11, v0.t
5108; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5109; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
5110; ZVFHMIN-NEXT:    ret
5111  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5112  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5113  %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
5114  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
5115  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
5116  ret <vscale x 2 x half> %v
5117}
5118
5119define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_neg_splat_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
5120; ZVFH-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked:
5121; ZVFH:       # %bb.0:
5122; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5123; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
5124; ZVFH-NEXT:    ret
5125;
5126; ZVFHMIN-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked:
5127; ZVFHMIN:       # %bb.0:
5128; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5129; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5130; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5131; ZVFHMIN-NEXT:    lui a0, 8
5132; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
5133; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
5134; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
5135; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10
5136; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
5137; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5138; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11
5139; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5140; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
5141; ZVFHMIN-NEXT:    ret
5142  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5143  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5144  %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5145  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5146  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5147  ret <vscale x 2 x half> %v
5148}
5149
5150define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_neg_splat_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
5151; ZVFH-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked_commute:
5152; ZVFH:       # %bb.0:
5153; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5154; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
5155; ZVFH-NEXT:    ret
5156;
5157; ZVFHMIN-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked_commute:
5158; ZVFHMIN:       # %bb.0:
5159; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5160; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5161; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5162; ZVFHMIN-NEXT:    lui a0, 8
5163; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
5164; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
5165; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
5166; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10
5167; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
5168; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5169; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11
5170; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5171; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
5172; ZVFHMIN-NEXT:    ret
5173  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5174  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5175  %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5176  %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5177  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5178  ret <vscale x 2 x half> %v
5179}
5180
5181define <vscale x 2 x half> @vfnmsub_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
5182; ZVFH-LABEL: vfnmsub_vv_nxv2f16:
5183; ZVFH:       # %bb.0:
5184; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5185; ZVFH-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
5186; ZVFH-NEXT:    vmv1r.v v8, v9
5187; ZVFH-NEXT:    ret
5188;
5189; ZVFHMIN-LABEL: vfnmsub_vv_nxv2f16:
5190; ZVFHMIN:       # %bb.0:
5191; ZVFHMIN-NEXT:    lui a1, 8
5192; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5193; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
5194; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
5195; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
5196; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
5197; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
5198; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5199; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11, v0.t
5200; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5201; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
5202; ZVFHMIN-NEXT:    ret
5203  %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
5204  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl)
5205  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
5206  ret <vscale x 2 x half> %v
5207}
5208
5209define <vscale x 2 x half> @vfnmsub_vv_nxv2f16_commuted(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
5210; ZVFH-LABEL: vfnmsub_vv_nxv2f16_commuted:
5211; ZVFH:       # %bb.0:
5212; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5213; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
5214; ZVFH-NEXT:    ret
5215;
5216; ZVFHMIN-LABEL: vfnmsub_vv_nxv2f16_commuted:
5217; ZVFHMIN:       # %bb.0:
5218; ZVFHMIN-NEXT:    lui a1, 8
5219; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5220; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
5221; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
5222; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
5223; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
5224; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
5225; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5226; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11, v0.t
5227; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5228; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
5229; ZVFHMIN-NEXT:    ret
5230  %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
5231  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl)
5232  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
5233  ret <vscale x 2 x half> %v
5234}
5235
5236define <vscale x 2 x half> @vfnmsub_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) {
5237; ZVFH-LABEL: vfnmsub_vv_nxv2f16_unmasked:
5238; ZVFH:       # %bb.0:
5239; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5240; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
5241; ZVFH-NEXT:    ret
5242;
5243; ZVFHMIN-LABEL: vfnmsub_vv_nxv2f16_unmasked:
5244; ZVFHMIN:       # %bb.0:
5245; ZVFHMIN-NEXT:    lui a1, 8
5246; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5247; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
5248; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
5249; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
5250; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
5251; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
5252; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5253; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
5254; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5255; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
5256; ZVFHMIN-NEXT:    ret
5257  %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5258  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5259  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5260  ret <vscale x 2 x half> %v
5261}
5262
5263define <vscale x 2 x half> @vfnmsub_vv_nxv2f16_unmasked_commuted(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) {
5264; ZVFH-LABEL: vfnmsub_vv_nxv2f16_unmasked_commuted:
5265; ZVFH:       # %bb.0:
5266; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5267; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
5268; ZVFH-NEXT:    ret
5269;
5270; ZVFHMIN-LABEL: vfnmsub_vv_nxv2f16_unmasked_commuted:
5271; ZVFHMIN:       # %bb.0:
5272; ZVFHMIN-NEXT:    lui a1, 8
5273; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5274; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
5275; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
5276; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10
5277; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
5278; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
5279; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5280; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
5281; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5282; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
5283; ZVFHMIN-NEXT:    ret
5284  %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5285  %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5286  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5287  ret <vscale x 2 x half> %v
5288}
5289
5290define <vscale x 2 x half> @vfnmsub_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
5291; ZVFH-LABEL: vfnmsub_vf_nxv2f16:
5292; ZVFH:       # %bb.0:
5293; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5294; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5295; ZVFH-NEXT:    ret
5296;
5297; ZVFHMIN-LABEL: vfnmsub_vf_nxv2f16:
5298; ZVFHMIN:       # %bb.0:
5299; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5300; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5301; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5302; ZVFHMIN-NEXT:    lui a0, 8
5303; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
5304; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
5305; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
5306; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10, v0.t
5307; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5308; ZVFHMIN-NEXT:    vfmadd.vv v9, v11, v8, v0.t
5309; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5310; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
5311; ZVFHMIN-NEXT:    ret
5312  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5313  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5314  %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
5315  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
5316  ret <vscale x 2 x half> %v
5317}
5318
5319define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
5320; ZVFH-LABEL: vfnmsub_vf_nxv2f16_commute:
5321; ZVFH:       # %bb.0:
5322; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5323; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5324; ZVFH-NEXT:    ret
5325;
5326; ZVFHMIN-LABEL: vfnmsub_vf_nxv2f16_commute:
5327; ZVFHMIN:       # %bb.0:
5328; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5329; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5330; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5331; ZVFHMIN-NEXT:    lui a0, 8
5332; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
5333; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
5334; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
5335; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10, v0.t
5336; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5337; ZVFHMIN-NEXT:    vfmadd.vv v11, v9, v8, v0.t
5338; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5339; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v11, v0.t
5340; ZVFHMIN-NEXT:    ret
5341  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5342  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5343  %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
5344  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
5345  ret <vscale x 2 x half> %v
5346}
5347
5348define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
5349; ZVFH-LABEL: vfnmsub_vf_nxv2f16_unmasked:
5350; ZVFH:       # %bb.0:
5351; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5352; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
5353; ZVFH-NEXT:    ret
5354;
5355; ZVFHMIN-LABEL: vfnmsub_vf_nxv2f16_unmasked:
5356; ZVFHMIN:       # %bb.0:
5357; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5358; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5359; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5360; ZVFHMIN-NEXT:    lui a0, 8
5361; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
5362; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
5363; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
5364; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
5365; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5366; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11
5367; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5368; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
5369; ZVFHMIN-NEXT:    ret
5370  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5371  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5372  %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5373  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5374  ret <vscale x 2 x half> %v
5375}
5376
5377define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
5378; ZVFH-LABEL: vfnmsub_vf_nxv2f16_unmasked_commute:
5379; ZVFH:       # %bb.0:
5380; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5381; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
5382; ZVFH-NEXT:    ret
5383;
5384; ZVFHMIN-LABEL: vfnmsub_vf_nxv2f16_unmasked_commute:
5385; ZVFHMIN:       # %bb.0:
5386; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5387; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5388; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5389; ZVFHMIN-NEXT:    lui a0, 8
5390; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
5391; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
5392; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
5393; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
5394; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5395; ZVFHMIN-NEXT:    vfmadd.vv v12, v9, v11
5396; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5397; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
5398; ZVFHMIN-NEXT:    ret
5399  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5400  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5401  %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5402  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5403  ret <vscale x 2 x half> %v
5404}
5405
5406define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_neg_splat(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
5407; ZVFH-LABEL: vfnmsub_vf_nxv2f16_neg_splat:
5408; ZVFH:       # %bb.0:
5409; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5410; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5411; ZVFH-NEXT:    ret
5412;
5413; ZVFHMIN-LABEL: vfnmsub_vf_nxv2f16_neg_splat:
5414; ZVFHMIN:       # %bb.0:
5415; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5416; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5417; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5418; ZVFHMIN-NEXT:    lui a0, 8
5419; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
5420; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
5421; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
5422; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
5423; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5424; ZVFHMIN-NEXT:    vfmadd.vv v11, v9, v10, v0.t
5425; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5426; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v11, v0.t
5427; ZVFHMIN-NEXT:    ret
5428  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5429  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5430  %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
5431  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
5432  ret <vscale x 2 x half> %v
5433}
5434
5435define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_neg_splat_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
5436; ZVFH-LABEL: vfnmsub_vf_nxv2f16_neg_splat_commute:
5437; ZVFH:       # %bb.0:
5438; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5439; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5440; ZVFH-NEXT:    ret
5441;
5442; ZVFHMIN-LABEL: vfnmsub_vf_nxv2f16_neg_splat_commute:
5443; ZVFHMIN:       # %bb.0:
5444; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5445; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5446; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5447; ZVFHMIN-NEXT:    lui a0, 8
5448; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
5449; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
5450; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
5451; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8, v0.t
5452; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5453; ZVFHMIN-NEXT:    vfmadd.vv v9, v11, v10, v0.t
5454; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5455; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9, v0.t
5456; ZVFHMIN-NEXT:    ret
5457  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5458  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5459  %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
5460  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
5461  ret <vscale x 2 x half> %v
5462}
5463
5464define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_neg_splat_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
5465; ZVFH-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked:
5466; ZVFH:       # %bb.0:
5467; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5468; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
5469; ZVFH-NEXT:    ret
5470;
5471; ZVFHMIN-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked:
5472; ZVFHMIN:       # %bb.0:
5473; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5474; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5475; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5476; ZVFHMIN-NEXT:    lui a0, 8
5477; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
5478; ZVFHMIN-NEXT:    vxor.vx v9, v10, a0
5479; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
5480; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
5481; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5482; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
5483; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5484; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
5485; ZVFHMIN-NEXT:    ret
5486  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5487  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5488  %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5489  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5490  ret <vscale x 2 x half> %v
5491}
5492
5493define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_neg_splat_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) {
5494; ZVFH-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked_commute:
5495; ZVFH:       # %bb.0:
5496; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5497; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
5498; ZVFH-NEXT:    ret
5499;
5500; ZVFHMIN-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked_commute:
5501; ZVFHMIN:       # %bb.0:
5502; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5503; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
5504; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5505; ZVFHMIN-NEXT:    lui a0, 8
5506; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9
5507; ZVFHMIN-NEXT:    vxor.vx v9, v10, a0
5508; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
5509; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
5510; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
5511; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11
5512; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
5513; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
5514; ZVFHMIN-NEXT:    ret
5515  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
5516  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
5517  %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5518  %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
5519  ret <vscale x 2 x half> %v
5520}
5521
5522declare <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
5523
5524define <vscale x 4 x half> @vfmsub_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5525; ZVFH-LABEL: vfmsub_vv_nxv4f16:
5526; ZVFH:       # %bb.0:
5527; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5528; ZVFH-NEXT:    vfmsub.vv v9, v8, v10, v0.t
5529; ZVFH-NEXT:    vmv.v.v v8, v9
5530; ZVFH-NEXT:    ret
5531;
5532; ZVFHMIN-LABEL: vfmsub_vv_nxv4f16:
5533; ZVFHMIN:       # %bb.0:
5534; ZVFHMIN-NEXT:    lui a1, 8
5535; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5536; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
5537; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
5538; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
5539; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t
5540; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5541; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12, v0.t
5542; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5543; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
5544; ZVFHMIN-NEXT:    ret
5545  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl)
5546  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
5547  ret <vscale x 4 x half> %v
5548}
5549
5550define <vscale x 4 x half> @vfmsub_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) {
5551; ZVFH-LABEL: vfmsub_vv_nxv4f16_unmasked:
5552; ZVFH:       # %bb.0:
5553; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5554; ZVFH-NEXT:    vfmsub.vv v8, v9, v10
5555; ZVFH-NEXT:    ret
5556;
5557; ZVFHMIN-LABEL: vfmsub_vv_nxv4f16_unmasked:
5558; ZVFHMIN:       # %bb.0:
5559; ZVFHMIN-NEXT:    lui a1, 8
5560; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5561; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
5562; ZVFHMIN-NEXT:    vxor.vx v8, v10, a1
5563; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
5564; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9
5565; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5566; ZVFHMIN-NEXT:    vfmadd.vv v14, v12, v10
5567; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5568; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
5569; ZVFHMIN-NEXT:    ret
5570  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5571  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5572  ret <vscale x 4 x half> %v
5573}
5574
5575define <vscale x 4 x half> @vfmsub_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5576; ZVFH-LABEL: vfmsub_vf_nxv4f16:
5577; ZVFH:       # %bb.0:
5578; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5579; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
5580; ZVFH-NEXT:    ret
5581;
5582; ZVFHMIN-LABEL: vfmsub_vf_nxv4f16:
5583; ZVFHMIN:       # %bb.0:
5584; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5585; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5586; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5587; ZVFHMIN-NEXT:    lui a0, 8
5588; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
5589; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
5590; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
5591; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
5592; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5593; ZVFHMIN-NEXT:    vfmadd.vv v16, v14, v12, v0.t
5594; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5595; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
5596; ZVFHMIN-NEXT:    ret
5597  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5598  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5599  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
5600  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
5601  ret <vscale x 4 x half> %v
5602}
5603
5604define <vscale x 4 x half> @vfmsub_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5605; ZVFH-LABEL: vfmsub_vf_nxv4f16_commute:
5606; ZVFH:       # %bb.0:
5607; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5608; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
5609; ZVFH-NEXT:    ret
5610;
5611; ZVFHMIN-LABEL: vfmsub_vf_nxv4f16_commute:
5612; ZVFHMIN:       # %bb.0:
5613; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5614; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5615; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5616; ZVFHMIN-NEXT:    lui a0, 8
5617; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
5618; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
5619; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
5620; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
5621; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5622; ZVFHMIN-NEXT:    vfmadd.vv v14, v8, v12, v0.t
5623; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5624; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
5625; ZVFHMIN-NEXT:    ret
5626  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5627  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5628  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
5629  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
5630  ret <vscale x 4 x half> %v
5631}
5632
5633define <vscale x 4 x half> @vfmsub_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
5634; ZVFH-LABEL: vfmsub_vf_nxv4f16_unmasked:
5635; ZVFH:       # %bb.0:
5636; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5637; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9
5638; ZVFH-NEXT:    ret
5639;
5640; ZVFHMIN-LABEL: vfmsub_vf_nxv4f16_unmasked:
5641; ZVFHMIN:       # %bb.0:
5642; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5643; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5644; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5645; ZVFHMIN-NEXT:    lui a0, 8
5646; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
5647; ZVFHMIN-NEXT:    vxor.vx v8, v9, a0
5648; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
5649; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
5650; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5651; ZVFHMIN-NEXT:    vfmadd.vv v16, v12, v14
5652; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5653; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
5654; ZVFHMIN-NEXT:    ret
5655  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5656  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5657  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5658  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5659  ret <vscale x 4 x half> %v
5660}
5661
5662define <vscale x 4 x half> @vfmsub_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
5663; ZVFH-LABEL: vfmsub_vf_nxv4f16_unmasked_commute:
5664; ZVFH:       # %bb.0:
5665; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5666; ZVFH-NEXT:    vfmsub.vf v8, fa0, v9
5667; ZVFH-NEXT:    ret
5668;
5669; ZVFHMIN-LABEL: vfmsub_vf_nxv4f16_unmasked_commute:
5670; ZVFHMIN:       # %bb.0:
5671; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5672; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5673; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5674; ZVFHMIN-NEXT:    lui a0, 8
5675; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
5676; ZVFHMIN-NEXT:    vxor.vx v8, v9, a0
5677; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
5678; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
5679; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5680; ZVFHMIN-NEXT:    vfmadd.vv v16, v12, v14
5681; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5682; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
5683; ZVFHMIN-NEXT:    ret
5684  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5685  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5686  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5687  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5688  ret <vscale x 4 x half> %v
5689}
5690
5691define <vscale x 4 x half> @vfnmadd_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5692; ZVFH-LABEL: vfnmadd_vv_nxv4f16:
5693; ZVFH:       # %bb.0:
5694; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5695; ZVFH-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
5696; ZVFH-NEXT:    vmv.v.v v8, v9
5697; ZVFH-NEXT:    ret
5698;
5699; ZVFHMIN-LABEL: vfnmadd_vv_nxv4f16:
5700; ZVFHMIN:       # %bb.0:
5701; ZVFHMIN-NEXT:    lui a1, 8
5702; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5703; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
5704; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
5705; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
5706; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
5707; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
5708; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5709; ZVFHMIN-NEXT:    vfmadd.vv v10, v14, v12, v0.t
5710; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5711; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
5712; ZVFHMIN-NEXT:    ret
5713  %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
5714  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl)
5715  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
5716  ret <vscale x 4 x half> %v
5717}
5718
5719define <vscale x 4 x half> @vfnmadd_vv_nxv4f16_commuted(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5720; ZVFH-LABEL: vfnmadd_vv_nxv4f16_commuted:
5721; ZVFH:       # %bb.0:
5722; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5723; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
5724; ZVFH-NEXT:    ret
5725;
5726; ZVFHMIN-LABEL: vfnmadd_vv_nxv4f16_commuted:
5727; ZVFHMIN:       # %bb.0:
5728; ZVFHMIN-NEXT:    lui a1, 8
5729; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5730; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
5731; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
5732; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
5733; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
5734; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
5735; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5736; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12, v0.t
5737; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5738; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
5739; ZVFHMIN-NEXT:    ret
5740  %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
5741  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl)
5742  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
5743  ret <vscale x 4 x half> %v
5744}
5745
5746define <vscale x 4 x half> @vfnmadd_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) {
5747; ZVFH-LABEL: vfnmadd_vv_nxv4f16_unmasked:
5748; ZVFH:       # %bb.0:
5749; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5750; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
5751; ZVFH-NEXT:    ret
5752;
5753; ZVFHMIN-LABEL: vfnmadd_vv_nxv4f16_unmasked:
5754; ZVFHMIN:       # %bb.0:
5755; ZVFHMIN-NEXT:    lui a1, 8
5756; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5757; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
5758; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
5759; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
5760; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
5761; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
5762; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5763; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12
5764; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5765; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
5766; ZVFHMIN-NEXT:    ret
5767  %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5768  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5769  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5770  ret <vscale x 4 x half> %v
5771}
5772
5773define <vscale x 4 x half> @vfnmadd_vv_nxv4f16_unmasked_commuted(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) {
5774; ZVFH-LABEL: vfnmadd_vv_nxv4f16_unmasked_commuted:
5775; ZVFH:       # %bb.0:
5776; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5777; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
5778; ZVFH-NEXT:    ret
5779;
5780; ZVFHMIN-LABEL: vfnmadd_vv_nxv4f16_unmasked_commuted:
5781; ZVFHMIN:       # %bb.0:
5782; ZVFHMIN-NEXT:    lui a1, 8
5783; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5784; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
5785; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
5786; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
5787; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
5788; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
5789; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5790; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12
5791; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5792; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
5793; ZVFHMIN-NEXT:    ret
5794  %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5795  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5796  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5797  ret <vscale x 4 x half> %v
5798}
5799
5800define <vscale x 4 x half> @vfnmadd_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5801; ZVFH-LABEL: vfnmadd_vf_nxv4f16:
5802; ZVFH:       # %bb.0:
5803; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5804; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5805; ZVFH-NEXT:    ret
5806;
5807; ZVFHMIN-LABEL: vfnmadd_vf_nxv4f16:
5808; ZVFHMIN:       # %bb.0:
5809; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5810; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5811; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5812; ZVFHMIN-NEXT:    lui a0, 8
5813; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
5814; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
5815; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
5816; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
5817; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
5818; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5819; ZVFHMIN-NEXT:    vfmadd.vv v16, v14, v12, v0.t
5820; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5821; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
5822; ZVFHMIN-NEXT:    ret
5823  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5824  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5825  %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl)
5826  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
5827  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
5828  ret <vscale x 4 x half> %v
5829}
5830
5831define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5832; ZVFH-LABEL: vfnmadd_vf_nxv4f16_commute:
5833; ZVFH:       # %bb.0:
5834; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5835; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5836; ZVFH-NEXT:    ret
5837;
5838; ZVFHMIN-LABEL: vfnmadd_vf_nxv4f16_commute:
5839; ZVFHMIN:       # %bb.0:
5840; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5841; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5842; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5843; ZVFHMIN-NEXT:    lui a0, 8
5844; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
5845; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
5846; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
5847; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
5848; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
5849; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5850; ZVFHMIN-NEXT:    vfmadd.vv v14, v8, v12, v0.t
5851; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5852; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
5853; ZVFHMIN-NEXT:    ret
5854  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5855  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5856  %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl)
5857  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
5858  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
5859  ret <vscale x 4 x half> %v
5860}
5861
5862define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
5863; ZVFH-LABEL: vfnmadd_vf_nxv4f16_unmasked:
5864; ZVFH:       # %bb.0:
5865; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5866; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
5867; ZVFH-NEXT:    ret
5868;
5869; ZVFHMIN-LABEL: vfnmadd_vf_nxv4f16_unmasked:
5870; ZVFHMIN:       # %bb.0:
5871; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5872; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5873; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5874; ZVFHMIN-NEXT:    lui a0, 8
5875; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
5876; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
5877; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
5878; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
5879; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
5880; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5881; ZVFHMIN-NEXT:    vfmadd.vv v16, v14, v12
5882; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5883; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
5884; ZVFHMIN-NEXT:    ret
5885  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5886  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5887  %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5888  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5889  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5890  ret <vscale x 4 x half> %v
5891}
5892
5893define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
5894; ZVFH-LABEL: vfnmadd_vf_nxv4f16_unmasked_commute:
5895; ZVFH:       # %bb.0:
5896; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5897; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
5898; ZVFH-NEXT:    ret
5899;
5900; ZVFHMIN-LABEL: vfnmadd_vf_nxv4f16_unmasked_commute:
5901; ZVFHMIN:       # %bb.0:
5902; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5903; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5904; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5905; ZVFHMIN-NEXT:    lui a0, 8
5906; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
5907; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
5908; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
5909; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
5910; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
5911; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5912; ZVFHMIN-NEXT:    vfmadd.vv v16, v14, v12
5913; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5914; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
5915; ZVFHMIN-NEXT:    ret
5916  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5917  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5918  %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5919  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5920  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
5921  ret <vscale x 4 x half> %v
5922}
5923
5924define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_neg_splat(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5925; ZVFH-LABEL: vfnmadd_vf_nxv4f16_neg_splat:
5926; ZVFH:       # %bb.0:
5927; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5928; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5929; ZVFH-NEXT:    ret
5930;
5931; ZVFHMIN-LABEL: vfnmadd_vf_nxv4f16_neg_splat:
5932; ZVFHMIN:       # %bb.0:
5933; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5934; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5935; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5936; ZVFHMIN-NEXT:    lui a0, 8
5937; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
5938; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
5939; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
5940; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v10, v0.t
5941; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
5942; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5943; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12, v0.t
5944; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5945; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
5946; ZVFHMIN-NEXT:    ret
5947  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5948  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5949  %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
5950  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
5951  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
5952  ret <vscale x 4 x half> %v
5953}
5954
5955define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_neg_splat_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
5956; ZVFH-LABEL: vfnmadd_vf_nxv4f16_neg_splat_commute:
5957; ZVFH:       # %bb.0:
5958; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5959; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5960; ZVFH-NEXT:    ret
5961;
5962; ZVFHMIN-LABEL: vfnmadd_vf_nxv4f16_neg_splat_commute:
5963; ZVFHMIN:       # %bb.0:
5964; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5965; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5966; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5967; ZVFHMIN-NEXT:    lui a0, 8
5968; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
5969; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0, v0.t
5970; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
5971; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v10, v0.t
5972; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
5973; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5974; ZVFHMIN-NEXT:    vfmadd.vv v10, v14, v12, v0.t
5975; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
5976; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
5977; ZVFHMIN-NEXT:    ret
5978  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
5979  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
5980  %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
5981  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
5982  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
5983  ret <vscale x 4 x half> %v
5984}
5985
5986define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_neg_splat_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
5987; ZVFH-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked:
5988; ZVFH:       # %bb.0:
5989; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5990; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
5991; ZVFH-NEXT:    ret
5992;
5993; ZVFHMIN-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked:
5994; ZVFHMIN:       # %bb.0:
5995; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
5996; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
5997; ZVFHMIN-NEXT:    vmv.v.x v10, a1
5998; ZVFHMIN-NEXT:    lui a0, 8
5999; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
6000; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
6001; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
6002; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v10
6003; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
6004; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6005; ZVFHMIN-NEXT:    vfmadd.vv v10, v14, v12
6006; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6007; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
6008; ZVFHMIN-NEXT:    ret
6009  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6010  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6011  %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6012  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6013  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6014  ret <vscale x 4 x half> %v
6015}
6016
6017define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_neg_splat_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
6018; ZVFH-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked_commute:
6019; ZVFH:       # %bb.0:
6020; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6021; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v9
6022; ZVFH-NEXT:    ret
6023;
6024; ZVFHMIN-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked_commute:
6025; ZVFHMIN:       # %bb.0:
6026; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6027; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6028; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6029; ZVFHMIN-NEXT:    lui a0, 8
6030; ZVFHMIN-NEXT:    vxor.vx v9, v9, a0
6031; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
6032; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
6033; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v10
6034; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
6035; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6036; ZVFHMIN-NEXT:    vfmadd.vv v10, v14, v12
6037; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6038; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
6039; ZVFHMIN-NEXT:    ret
6040  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6041  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6042  %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6043  %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6044  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6045  ret <vscale x 4 x half> %v
6046}
6047
6048define <vscale x 4 x half> @vfnmsub_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
6049; ZVFH-LABEL: vfnmsub_vv_nxv4f16:
6050; ZVFH:       # %bb.0:
6051; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6052; ZVFH-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
6053; ZVFH-NEXT:    vmv.v.v v8, v9
6054; ZVFH-NEXT:    ret
6055;
6056; ZVFHMIN-LABEL: vfnmsub_vv_nxv4f16:
6057; ZVFHMIN:       # %bb.0:
6058; ZVFHMIN-NEXT:    lui a1, 8
6059; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6060; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
6061; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
6062; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
6063; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
6064; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
6065; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6066; ZVFHMIN-NEXT:    vfmadd.vv v10, v14, v12, v0.t
6067; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6068; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10, v0.t
6069; ZVFHMIN-NEXT:    ret
6070  %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
6071  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl)
6072  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
6073  ret <vscale x 4 x half> %v
6074}
6075
6076define <vscale x 4 x half> @vfnmsub_vv_nxv4f16_commuted(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
6077; ZVFH-LABEL: vfnmsub_vv_nxv4f16_commuted:
6078; ZVFH:       # %bb.0:
6079; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6080; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
6081; ZVFH-NEXT:    ret
6082;
6083; ZVFHMIN-LABEL: vfnmsub_vv_nxv4f16_commuted:
6084; ZVFHMIN:       # %bb.0:
6085; ZVFHMIN-NEXT:    lui a1, 8
6086; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6087; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1, v0.t
6088; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
6089; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
6090; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
6091; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
6092; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6093; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12, v0.t
6094; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6095; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
6096; ZVFHMIN-NEXT:    ret
6097  %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
6098  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl)
6099  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
6100  ret <vscale x 4 x half> %v
6101}
6102
6103define <vscale x 4 x half> @vfnmsub_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) {
6104; ZVFH-LABEL: vfnmsub_vv_nxv4f16_unmasked:
6105; ZVFH:       # %bb.0:
6106; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6107; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
6108; ZVFH-NEXT:    ret
6109;
6110; ZVFHMIN-LABEL: vfnmsub_vv_nxv4f16_unmasked:
6111; ZVFHMIN:       # %bb.0:
6112; ZVFHMIN-NEXT:    lui a1, 8
6113; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6114; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
6115; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
6116; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
6117; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
6118; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
6119; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6120; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12
6121; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6122; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
6123; ZVFHMIN-NEXT:    ret
6124  %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6125  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6126  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6127  ret <vscale x 4 x half> %v
6128}
6129
6130define <vscale x 4 x half> @vfnmsub_vv_nxv4f16_unmasked_commuted(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) {
6131; ZVFH-LABEL: vfnmsub_vv_nxv4f16_unmasked_commuted:
6132; ZVFH:       # %bb.0:
6133; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6134; ZVFH-NEXT:    vfnmadd.vv v8, v9, v10
6135; ZVFH-NEXT:    ret
6136;
6137; ZVFHMIN-LABEL: vfnmsub_vv_nxv4f16_unmasked_commuted:
6138; ZVFHMIN:       # %bb.0:
6139; ZVFHMIN-NEXT:    lui a1, 8
6140; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6141; ZVFHMIN-NEXT:    vxor.vx v9, v9, a1
6142; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
6143; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
6144; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
6145; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
6146; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6147; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12
6148; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6149; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
6150; ZVFHMIN-NEXT:    ret
6151  %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6152  %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6153  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6154  ret <vscale x 4 x half> %v
6155}
6156
6157define <vscale x 4 x half> @vfnmsub_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
6158; ZVFH-LABEL: vfnmsub_vf_nxv4f16:
6159; ZVFH:       # %bb.0:
6160; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6161; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
6162; ZVFH-NEXT:    ret
6163;
6164; ZVFHMIN-LABEL: vfnmsub_vf_nxv4f16:
6165; ZVFHMIN:       # %bb.0:
6166; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6167; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6168; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6169; ZVFHMIN-NEXT:    lui a0, 8
6170; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
6171; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
6172; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t
6173; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
6174; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6175; ZVFHMIN-NEXT:    vfmadd.vv v16, v12, v14, v0.t
6176; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6177; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
6178; ZVFHMIN-NEXT:    ret
6179  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6180  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6181  %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl)
6182  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
6183  ret <vscale x 4 x half> %v
6184}
6185
6186define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
6187; ZVFH-LABEL: vfnmsub_vf_nxv4f16_commute:
6188; ZVFH:       # %bb.0:
6189; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6190; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
6191; ZVFH-NEXT:    ret
6192;
6193; ZVFHMIN-LABEL: vfnmsub_vf_nxv4f16_commute:
6194; ZVFHMIN:       # %bb.0:
6195; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6196; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6197; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6198; ZVFHMIN-NEXT:    lui a0, 8
6199; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
6200; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
6201; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t
6202; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
6203; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6204; ZVFHMIN-NEXT:    vfmadd.vv v12, v8, v14, v0.t
6205; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6206; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
6207; ZVFHMIN-NEXT:    ret
6208  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6209  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6210  %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl)
6211  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
6212  ret <vscale x 4 x half> %v
6213}
6214
6215define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
6216; ZVFH-LABEL: vfnmsub_vf_nxv4f16_unmasked:
6217; ZVFH:       # %bb.0:
6218; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6219; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
6220; ZVFH-NEXT:    ret
6221;
6222; ZVFHMIN-LABEL: vfnmsub_vf_nxv4f16_unmasked:
6223; ZVFHMIN:       # %bb.0:
6224; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6225; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6226; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6227; ZVFHMIN-NEXT:    lui a0, 8
6228; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
6229; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
6230; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
6231; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
6232; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6233; ZVFHMIN-NEXT:    vfmadd.vv v16, v14, v12
6234; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6235; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
6236; ZVFHMIN-NEXT:    ret
6237  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6238  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6239  %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6240  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6241  ret <vscale x 4 x half> %v
6242}
6243
6244define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
6245; ZVFH-LABEL: vfnmsub_vf_nxv4f16_unmasked_commute:
6246; ZVFH:       # %bb.0:
6247; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6248; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
6249; ZVFH-NEXT:    ret
6250;
6251; ZVFHMIN-LABEL: vfnmsub_vf_nxv4f16_unmasked_commute:
6252; ZVFHMIN:       # %bb.0:
6253; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6254; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6255; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6256; ZVFHMIN-NEXT:    lui a0, 8
6257; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
6258; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
6259; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
6260; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
6261; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6262; ZVFHMIN-NEXT:    vfmadd.vv v16, v14, v12
6263; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6264; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
6265; ZVFHMIN-NEXT:    ret
6266  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6267  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6268  %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6269  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6270  ret <vscale x 4 x half> %v
6271}
6272
6273define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_neg_splat(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
6274; ZVFH-LABEL: vfnmsub_vf_nxv4f16_neg_splat:
6275; ZVFH:       # %bb.0:
6276; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6277; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
6278; ZVFH-NEXT:    ret
6279;
6280; ZVFHMIN-LABEL: vfnmsub_vf_nxv4f16_neg_splat:
6281; ZVFHMIN:       # %bb.0:
6282; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6283; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6284; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6285; ZVFHMIN-NEXT:    lui a0, 8
6286; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
6287; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
6288; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
6289; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
6290; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6291; ZVFHMIN-NEXT:    vfmadd.vv v12, v14, v10, v0.t
6292; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6293; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
6294; ZVFHMIN-NEXT:    ret
6295  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6296  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6297  %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
6298  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
6299  ret <vscale x 4 x half> %v
6300}
6301
6302define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_neg_splat_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
6303; ZVFH-LABEL: vfnmsub_vf_nxv4f16_neg_splat_commute:
6304; ZVFH:       # %bb.0:
6305; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6306; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
6307; ZVFH-NEXT:    ret
6308;
6309; ZVFHMIN-LABEL: vfnmsub_vf_nxv4f16_neg_splat_commute:
6310; ZVFHMIN:       # %bb.0:
6311; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6312; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6313; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6314; ZVFHMIN-NEXT:    lui a0, 8
6315; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
6316; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
6317; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t
6318; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
6319; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6320; ZVFHMIN-NEXT:    vfmadd.vv v14, v12, v10, v0.t
6321; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6322; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t
6323; ZVFHMIN-NEXT:    ret
6324  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6325  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6326  %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
6327  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
6328  ret <vscale x 4 x half> %v
6329}
6330
6331define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_neg_splat_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
6332; ZVFH-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked:
6333; ZVFH:       # %bb.0:
6334; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6335; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
6336; ZVFH-NEXT:    ret
6337;
6338; ZVFHMIN-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked:
6339; ZVFHMIN:       # %bb.0:
6340; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6341; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6342; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6343; ZVFHMIN-NEXT:    lui a0, 8
6344; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
6345; ZVFHMIN-NEXT:    vxor.vx v9, v10, a0
6346; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
6347; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
6348; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6349; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12
6350; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6351; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
6352; ZVFHMIN-NEXT:    ret
6353  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6354  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6355  %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6356  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6357  ret <vscale x 4 x half> %v
6358}
6359
6360define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_neg_splat_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
6361; ZVFH-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked_commute:
6362; ZVFH:       # %bb.0:
6363; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6364; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v9
6365; ZVFH-NEXT:    ret
6366;
6367; ZVFHMIN-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked_commute:
6368; ZVFHMIN:       # %bb.0:
6369; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6370; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
6371; ZVFHMIN-NEXT:    vmv.v.x v10, a1
6372; ZVFHMIN-NEXT:    lui a0, 8
6373; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
6374; ZVFHMIN-NEXT:    vxor.vx v9, v10, a0
6375; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
6376; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
6377; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6378; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12
6379; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
6380; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14
6381; ZVFHMIN-NEXT:    ret
6382  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
6383  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
6384  %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6385  %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
6386  ret <vscale x 4 x half> %v
6387}
6388
6389declare <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
6390
6391define <vscale x 8 x half> @vfmsub_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6392; ZVFH-LABEL: vfmsub_vv_nxv8f16:
6393; ZVFH:       # %bb.0:
6394; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6395; ZVFH-NEXT:    vfmsub.vv v10, v8, v12, v0.t
6396; ZVFH-NEXT:    vmv.v.v v8, v10
6397; ZVFH-NEXT:    ret
6398;
6399; ZVFHMIN-LABEL: vfmsub_vv_nxv8f16:
6400; ZVFHMIN:       # %bb.0:
6401; ZVFHMIN-NEXT:    lui a1, 8
6402; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6403; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1, v0.t
6404; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
6405; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
6406; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t
6407; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6408; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16, v0.t
6409; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6410; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
6411; ZVFHMIN-NEXT:    ret
6412  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl)
6413  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
6414  ret <vscale x 8 x half> %v
6415}
6416
6417define <vscale x 8 x half> @vfmsub_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) {
6418; ZVFH-LABEL: vfmsub_vv_nxv8f16_unmasked:
6419; ZVFH:       # %bb.0:
6420; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6421; ZVFH-NEXT:    vfmsub.vv v8, v10, v12
6422; ZVFH-NEXT:    ret
6423;
6424; ZVFHMIN-LABEL: vfmsub_vv_nxv8f16_unmasked:
6425; ZVFHMIN:       # %bb.0:
6426; ZVFHMIN-NEXT:    lui a1, 8
6427; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6428; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
6429; ZVFHMIN-NEXT:    vxor.vx v8, v12, a1
6430; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
6431; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10
6432; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6433; ZVFHMIN-NEXT:    vfmadd.vv v20, v16, v12
6434; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6435; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
6436; ZVFHMIN-NEXT:    ret
6437  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6438  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6439  ret <vscale x 8 x half> %v
6440}
6441
6442define <vscale x 8 x half> @vfmsub_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6443; ZVFH-LABEL: vfmsub_vf_nxv8f16:
6444; ZVFH:       # %bb.0:
6445; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6446; ZVFH-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
6447; ZVFH-NEXT:    ret
6448;
6449; ZVFHMIN-LABEL: vfmsub_vf_nxv8f16:
6450; ZVFHMIN:       # %bb.0:
6451; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6452; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6453; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6454; ZVFHMIN-NEXT:    lui a0, 8
6455; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
6456; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
6457; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
6458; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
6459; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6460; ZVFHMIN-NEXT:    vfmadd.vv v24, v20, v16, v0.t
6461; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6462; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
6463; ZVFHMIN-NEXT:    ret
6464  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6465  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6466  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
6467  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
6468  ret <vscale x 8 x half> %v
6469}
6470
6471define <vscale x 8 x half> @vfmsub_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6472; ZVFH-LABEL: vfmsub_vf_nxv8f16_commute:
6473; ZVFH:       # %bb.0:
6474; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6475; ZVFH-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
6476; ZVFH-NEXT:    ret
6477;
6478; ZVFHMIN-LABEL: vfmsub_vf_nxv8f16_commute:
6479; ZVFHMIN:       # %bb.0:
6480; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6481; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6482; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6483; ZVFHMIN-NEXT:    lui a0, 8
6484; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
6485; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
6486; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
6487; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12, v0.t
6488; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6489; ZVFHMIN-NEXT:    vfmadd.vv v20, v8, v16, v0.t
6490; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6491; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
6492; ZVFHMIN-NEXT:    ret
6493  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6494  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6495  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
6496  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
6497  ret <vscale x 8 x half> %v
6498}
6499
6500define <vscale x 8 x half> @vfmsub_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
6501; ZVFH-LABEL: vfmsub_vf_nxv8f16_unmasked:
6502; ZVFH:       # %bb.0:
6503; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6504; ZVFH-NEXT:    vfmsub.vf v8, fa0, v10
6505; ZVFH-NEXT:    ret
6506;
6507; ZVFHMIN-LABEL: vfmsub_vf_nxv8f16_unmasked:
6508; ZVFHMIN:       # %bb.0:
6509; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6510; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6511; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6512; ZVFHMIN-NEXT:    lui a0, 8
6513; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
6514; ZVFHMIN-NEXT:    vxor.vx v8, v10, a0
6515; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
6516; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
6517; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6518; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v20
6519; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6520; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
6521; ZVFHMIN-NEXT:    ret
6522  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6523  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6524  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6525  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6526  ret <vscale x 8 x half> %v
6527}
6528
6529define <vscale x 8 x half> @vfmsub_vf_nxv8f16_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
6530; ZVFH-LABEL: vfmsub_vf_nxv8f16_unmasked_commute:
6531; ZVFH:       # %bb.0:
6532; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6533; ZVFH-NEXT:    vfmsub.vf v8, fa0, v10
6534; ZVFH-NEXT:    ret
6535;
6536; ZVFHMIN-LABEL: vfmsub_vf_nxv8f16_unmasked_commute:
6537; ZVFHMIN:       # %bb.0:
6538; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6539; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6540; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6541; ZVFHMIN-NEXT:    lui a0, 8
6542; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
6543; ZVFHMIN-NEXT:    vxor.vx v8, v10, a0
6544; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
6545; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
6546; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6547; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v20
6548; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6549; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
6550; ZVFHMIN-NEXT:    ret
6551  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6552  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6553  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6554  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6555  ret <vscale x 8 x half> %v
6556}
6557
6558define <vscale x 8 x half> @vfnmadd_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6559; ZVFH-LABEL: vfnmadd_vv_nxv8f16:
6560; ZVFH:       # %bb.0:
6561; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6562; ZVFH-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
6563; ZVFH-NEXT:    vmv.v.v v8, v10
6564; ZVFH-NEXT:    ret
6565;
6566; ZVFHMIN-LABEL: vfnmadd_vv_nxv8f16:
6567; ZVFHMIN:       # %bb.0:
6568; ZVFHMIN-NEXT:    lui a1, 8
6569; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6570; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
6571; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1, v0.t
6572; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
6573; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
6574; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
6575; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6576; ZVFHMIN-NEXT:    vfmadd.vv v12, v20, v16, v0.t
6577; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6578; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
6579; ZVFHMIN-NEXT:    ret
6580  %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
6581  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl)
6582  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
6583  ret <vscale x 8 x half> %v
6584}
6585
6586define <vscale x 8 x half> @vfnmadd_vv_nxv8f16_commuted(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6587; ZVFH-LABEL: vfnmadd_vv_nxv8f16_commuted:
6588; ZVFH:       # %bb.0:
6589; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6590; ZVFH-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
6591; ZVFH-NEXT:    ret
6592;
6593; ZVFHMIN-LABEL: vfnmadd_vv_nxv8f16_commuted:
6594; ZVFHMIN:       # %bb.0:
6595; ZVFHMIN-NEXT:    lui a1, 8
6596; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6597; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
6598; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1, v0.t
6599; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
6600; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
6601; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
6602; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6603; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16, v0.t
6604; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6605; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
6606; ZVFHMIN-NEXT:    ret
6607  %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
6608  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl)
6609  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
6610  ret <vscale x 8 x half> %v
6611}
6612
6613define <vscale x 8 x half> @vfnmadd_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) {
6614; ZVFH-LABEL: vfnmadd_vv_nxv8f16_unmasked:
6615; ZVFH:       # %bb.0:
6616; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6617; ZVFH-NEXT:    vfnmadd.vv v8, v10, v12
6618; ZVFH-NEXT:    ret
6619;
6620; ZVFHMIN-LABEL: vfnmadd_vv_nxv8f16_unmasked:
6621; ZVFHMIN:       # %bb.0:
6622; ZVFHMIN-NEXT:    lui a1, 8
6623; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6624; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
6625; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1
6626; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
6627; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
6628; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
6629; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6630; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16
6631; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6632; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
6633; ZVFHMIN-NEXT:    ret
6634  %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6635  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6636  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6637  ret <vscale x 8 x half> %v
6638}
6639
6640define <vscale x 8 x half> @vfnmadd_vv_nxv8f16_unmasked_commuted(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) {
6641; ZVFH-LABEL: vfnmadd_vv_nxv8f16_unmasked_commuted:
6642; ZVFH:       # %bb.0:
6643; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6644; ZVFH-NEXT:    vfnmadd.vv v8, v10, v12
6645; ZVFH-NEXT:    ret
6646;
6647; ZVFHMIN-LABEL: vfnmadd_vv_nxv8f16_unmasked_commuted:
6648; ZVFHMIN:       # %bb.0:
6649; ZVFHMIN-NEXT:    lui a1, 8
6650; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6651; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
6652; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1
6653; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
6654; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
6655; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
6656; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6657; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16
6658; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6659; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
6660; ZVFHMIN-NEXT:    ret
6661  %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6662  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6663  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6664  ret <vscale x 8 x half> %v
6665}
6666
6667define <vscale x 8 x half> @vfnmadd_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6668; ZVFH-LABEL: vfnmadd_vf_nxv8f16:
6669; ZVFH:       # %bb.0:
6670; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6671; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6672; ZVFH-NEXT:    ret
6673;
6674; ZVFHMIN-LABEL: vfnmadd_vf_nxv8f16:
6675; ZVFHMIN:       # %bb.0:
6676; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6677; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6678; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6679; ZVFHMIN-NEXT:    lui a0, 8
6680; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
6681; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
6682; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
6683; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
6684; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
6685; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6686; ZVFHMIN-NEXT:    vfmadd.vv v24, v20, v16, v0.t
6687; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6688; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
6689; ZVFHMIN-NEXT:    ret
6690  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6691  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6692  %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl)
6693  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
6694  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
6695  ret <vscale x 8 x half> %v
6696}
6697
6698define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6699; ZVFH-LABEL: vfnmadd_vf_nxv8f16_commute:
6700; ZVFH:       # %bb.0:
6701; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6702; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6703; ZVFH-NEXT:    ret
6704;
6705; ZVFHMIN-LABEL: vfnmadd_vf_nxv8f16_commute:
6706; ZVFHMIN:       # %bb.0:
6707; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6708; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6709; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6710; ZVFHMIN-NEXT:    lui a0, 8
6711; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
6712; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
6713; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
6714; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
6715; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12, v0.t
6716; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6717; ZVFHMIN-NEXT:    vfmadd.vv v20, v8, v16, v0.t
6718; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6719; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
6720; ZVFHMIN-NEXT:    ret
6721  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6722  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6723  %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl)
6724  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
6725  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
6726  ret <vscale x 8 x half> %v
6727}
6728
6729define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
6730; ZVFH-LABEL: vfnmadd_vf_nxv8f16_unmasked:
6731; ZVFH:       # %bb.0:
6732; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6733; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v10
6734; ZVFH-NEXT:    ret
6735;
6736; ZVFHMIN-LABEL: vfnmadd_vf_nxv8f16_unmasked:
6737; ZVFHMIN:       # %bb.0:
6738; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6739; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6740; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6741; ZVFHMIN-NEXT:    lui a0, 8
6742; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
6743; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
6744; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
6745; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
6746; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
6747; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6748; ZVFHMIN-NEXT:    vfmadd.vv v24, v20, v16
6749; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6750; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
6751; ZVFHMIN-NEXT:    ret
6752  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6753  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6754  %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6755  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6756  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6757  ret <vscale x 8 x half> %v
6758}
6759
6760define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
6761; ZVFH-LABEL: vfnmadd_vf_nxv8f16_unmasked_commute:
6762; ZVFH:       # %bb.0:
6763; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6764; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v10
6765; ZVFH-NEXT:    ret
6766;
6767; ZVFHMIN-LABEL: vfnmadd_vf_nxv8f16_unmasked_commute:
6768; ZVFHMIN:       # %bb.0:
6769; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6770; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6771; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6772; ZVFHMIN-NEXT:    lui a0, 8
6773; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
6774; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
6775; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
6776; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
6777; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
6778; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6779; ZVFHMIN-NEXT:    vfmadd.vv v24, v20, v16
6780; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6781; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
6782; ZVFHMIN-NEXT:    ret
6783  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6784  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6785  %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6786  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6787  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6788  ret <vscale x 8 x half> %v
6789}
6790
6791define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_neg_splat(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6792; ZVFH-LABEL: vfnmadd_vf_nxv8f16_neg_splat:
6793; ZVFH:       # %bb.0:
6794; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6795; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6796; ZVFH-NEXT:    ret
6797;
6798; ZVFHMIN-LABEL: vfnmadd_vf_nxv8f16_neg_splat:
6799; ZVFHMIN:       # %bb.0:
6800; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6801; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6802; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6803; ZVFHMIN-NEXT:    lui a0, 8
6804; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
6805; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
6806; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
6807; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v12, v0.t
6808; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
6809; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6810; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16, v0.t
6811; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6812; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
6813; ZVFHMIN-NEXT:    ret
6814  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6815  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6816  %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
6817  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
6818  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
6819  ret <vscale x 8 x half> %v
6820}
6821
6822define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_neg_splat_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6823; ZVFH-LABEL: vfnmadd_vf_nxv8f16_neg_splat_commute:
6824; ZVFH:       # %bb.0:
6825; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6826; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6827; ZVFH-NEXT:    ret
6828;
6829; ZVFHMIN-LABEL: vfnmadd_vf_nxv8f16_neg_splat_commute:
6830; ZVFHMIN:       # %bb.0:
6831; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6832; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6833; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6834; ZVFHMIN-NEXT:    lui a0, 8
6835; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
6836; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0, v0.t
6837; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
6838; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v12, v0.t
6839; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
6840; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6841; ZVFHMIN-NEXT:    vfmadd.vv v12, v20, v16, v0.t
6842; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6843; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
6844; ZVFHMIN-NEXT:    ret
6845  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6846  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6847  %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
6848  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
6849  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
6850  ret <vscale x 8 x half> %v
6851}
6852
6853define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_neg_splat_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
6854; ZVFH-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked:
6855; ZVFH:       # %bb.0:
6856; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6857; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v10
6858; ZVFH-NEXT:    ret
6859;
6860; ZVFHMIN-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked:
6861; ZVFHMIN:       # %bb.0:
6862; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6863; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6864; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6865; ZVFHMIN-NEXT:    lui a0, 8
6866; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
6867; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0
6868; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
6869; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v12
6870; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
6871; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6872; ZVFHMIN-NEXT:    vfmadd.vv v12, v20, v16
6873; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6874; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
6875; ZVFHMIN-NEXT:    ret
6876  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6877  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6878  %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6879  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6880  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6881  ret <vscale x 8 x half> %v
6882}
6883
6884define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_neg_splat_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
6885; ZVFH-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked_commute:
6886; ZVFH:       # %bb.0:
6887; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6888; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v10
6889; ZVFH-NEXT:    ret
6890;
6891; ZVFHMIN-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked_commute:
6892; ZVFHMIN:       # %bb.0:
6893; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
6894; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6895; ZVFHMIN-NEXT:    vmv.v.x v12, a1
6896; ZVFHMIN-NEXT:    lui a0, 8
6897; ZVFHMIN-NEXT:    vxor.vx v10, v10, a0
6898; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0
6899; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
6900; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v12
6901; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
6902; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6903; ZVFHMIN-NEXT:    vfmadd.vv v12, v20, v16
6904; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6905; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
6906; ZVFHMIN-NEXT:    ret
6907  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
6908  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
6909  %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6910  %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6911  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6912  ret <vscale x 8 x half> %v
6913}
6914
6915define <vscale x 8 x half> @vfnmsub_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6916; ZVFH-LABEL: vfnmsub_vv_nxv8f16:
6917; ZVFH:       # %bb.0:
6918; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6919; ZVFH-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
6920; ZVFH-NEXT:    vmv.v.v v8, v10
6921; ZVFH-NEXT:    ret
6922;
6923; ZVFHMIN-LABEL: vfnmsub_vv_nxv8f16:
6924; ZVFHMIN:       # %bb.0:
6925; ZVFHMIN-NEXT:    lui a1, 8
6926; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6927; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
6928; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1, v0.t
6929; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
6930; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
6931; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
6932; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6933; ZVFHMIN-NEXT:    vfmadd.vv v12, v20, v16, v0.t
6934; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6935; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
6936; ZVFHMIN-NEXT:    ret
6937  %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
6938  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl)
6939  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
6940  ret <vscale x 8 x half> %v
6941}
6942
6943define <vscale x 8 x half> @vfnmsub_vv_nxv8f16_commuted(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
6944; ZVFH-LABEL: vfnmsub_vv_nxv8f16_commuted:
6945; ZVFH:       # %bb.0:
6946; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6947; ZVFH-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
6948; ZVFH-NEXT:    ret
6949;
6950; ZVFHMIN-LABEL: vfnmsub_vv_nxv8f16_commuted:
6951; ZVFHMIN:       # %bb.0:
6952; ZVFHMIN-NEXT:    lui a1, 8
6953; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6954; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1, v0.t
6955; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1, v0.t
6956; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
6957; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
6958; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
6959; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6960; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16, v0.t
6961; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6962; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
6963; ZVFHMIN-NEXT:    ret
6964  %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
6965  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl)
6966  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
6967  ret <vscale x 8 x half> %v
6968}
6969
6970define <vscale x 8 x half> @vfnmsub_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) {
6971; ZVFH-LABEL: vfnmsub_vv_nxv8f16_unmasked:
6972; ZVFH:       # %bb.0:
6973; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6974; ZVFH-NEXT:    vfnmadd.vv v8, v10, v12
6975; ZVFH-NEXT:    ret
6976;
6977; ZVFHMIN-LABEL: vfnmsub_vv_nxv8f16_unmasked:
6978; ZVFHMIN:       # %bb.0:
6979; ZVFHMIN-NEXT:    lui a1, 8
6980; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
6981; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
6982; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1
6983; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
6984; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
6985; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
6986; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6987; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16
6988; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6989; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
6990; ZVFHMIN-NEXT:    ret
6991  %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6992  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6993  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
6994  ret <vscale x 8 x half> %v
6995}
6996
6997define <vscale x 8 x half> @vfnmsub_vv_nxv8f16_unmasked_commuted(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) {
6998; ZVFH-LABEL: vfnmsub_vv_nxv8f16_unmasked_commuted:
6999; ZVFH:       # %bb.0:
7000; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7001; ZVFH-NEXT:    vfnmadd.vv v8, v10, v12
7002; ZVFH-NEXT:    ret
7003;
7004; ZVFHMIN-LABEL: vfnmsub_vv_nxv8f16_unmasked_commuted:
7005; ZVFHMIN:       # %bb.0:
7006; ZVFHMIN-NEXT:    lui a1, 8
7007; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7008; ZVFHMIN-NEXT:    vxor.vx v10, v10, a1
7009; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1
7010; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
7011; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
7012; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
7013; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7014; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16
7015; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7016; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
7017; ZVFHMIN-NEXT:    ret
7018  %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7019  %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7020  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7021  ret <vscale x 8 x half> %v
7022}
7023
7024define <vscale x 8 x half> @vfnmsub_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
7025; ZVFH-LABEL: vfnmsub_vf_nxv8f16:
7026; ZVFH:       # %bb.0:
7027; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7028; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
7029; ZVFH-NEXT:    ret
7030;
7031; ZVFHMIN-LABEL: vfnmsub_vf_nxv8f16:
7032; ZVFHMIN:       # %bb.0:
7033; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7034; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7035; ZVFHMIN-NEXT:    vmv.v.x v12, a1
7036; ZVFHMIN-NEXT:    lui a0, 8
7037; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
7038; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
7039; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t
7040; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
7041; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7042; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v20, v0.t
7043; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7044; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
7045; ZVFHMIN-NEXT:    ret
7046  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
7047  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
7048  %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl)
7049  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
7050  ret <vscale x 8 x half> %v
7051}
7052
7053define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
7054; ZVFH-LABEL: vfnmsub_vf_nxv8f16_commute:
7055; ZVFH:       # %bb.0:
7056; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7057; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
7058; ZVFH-NEXT:    ret
7059;
7060; ZVFHMIN-LABEL: vfnmsub_vf_nxv8f16_commute:
7061; ZVFHMIN:       # %bb.0:
7062; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7063; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7064; ZVFHMIN-NEXT:    vmv.v.x v12, a1
7065; ZVFHMIN-NEXT:    lui a0, 8
7066; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
7067; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
7068; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t
7069; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12, v0.t
7070; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7071; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v20, v0.t
7072; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7073; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7074; ZVFHMIN-NEXT:    ret
7075  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
7076  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
7077  %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl)
7078  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
7079  ret <vscale x 8 x half> %v
7080}
7081
7082define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
7083; ZVFH-LABEL: vfnmsub_vf_nxv8f16_unmasked:
7084; ZVFH:       # %bb.0:
7085; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7086; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v10
7087; ZVFH-NEXT:    ret
7088;
7089; ZVFHMIN-LABEL: vfnmsub_vf_nxv8f16_unmasked:
7090; ZVFHMIN:       # %bb.0:
7091; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7092; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7093; ZVFHMIN-NEXT:    vmv.v.x v12, a1
7094; ZVFHMIN-NEXT:    lui a0, 8
7095; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
7096; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
7097; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
7098; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
7099; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7100; ZVFHMIN-NEXT:    vfmadd.vv v24, v20, v16
7101; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7102; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
7103; ZVFHMIN-NEXT:    ret
7104  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
7105  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
7106  %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7107  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7108  ret <vscale x 8 x half> %v
7109}
7110
7111define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
7112; ZVFH-LABEL: vfnmsub_vf_nxv8f16_unmasked_commute:
7113; ZVFH:       # %bb.0:
7114; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7115; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v10
7116; ZVFH-NEXT:    ret
7117;
7118; ZVFHMIN-LABEL: vfnmsub_vf_nxv8f16_unmasked_commute:
7119; ZVFHMIN:       # %bb.0:
7120; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7121; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7122; ZVFHMIN-NEXT:    vmv.v.x v12, a1
7123; ZVFHMIN-NEXT:    lui a0, 8
7124; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
7125; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
7126; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
7127; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
7128; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7129; ZVFHMIN-NEXT:    vfmadd.vv v24, v20, v16
7130; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7131; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24
7132; ZVFHMIN-NEXT:    ret
7133  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
7134  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
7135  %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7136  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7137  ret <vscale x 8 x half> %v
7138}
7139
7140define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_neg_splat(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
7141; ZVFH-LABEL: vfnmsub_vf_nxv8f16_neg_splat:
7142; ZVFH:       # %bb.0:
7143; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7144; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
7145; ZVFH-NEXT:    ret
7146;
7147; ZVFHMIN-LABEL: vfnmsub_vf_nxv8f16_neg_splat:
7148; ZVFHMIN:       # %bb.0:
7149; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7150; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7151; ZVFHMIN-NEXT:    vmv.v.x v12, a1
7152; ZVFHMIN-NEXT:    lui a0, 8
7153; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
7154; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
7155; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
7156; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
7157; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7158; ZVFHMIN-NEXT:    vfmadd.vv v16, v20, v12, v0.t
7159; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7160; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7161; ZVFHMIN-NEXT:    ret
7162  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
7163  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
7164  %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
7165  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
7166  ret <vscale x 8 x half> %v
7167}
7168
7169define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_neg_splat_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
7170; ZVFH-LABEL: vfnmsub_vf_nxv8f16_neg_splat_commute:
7171; ZVFH:       # %bb.0:
7172; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7173; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
7174; ZVFH-NEXT:    ret
7175;
7176; ZVFHMIN-LABEL: vfnmsub_vf_nxv8f16_neg_splat_commute:
7177; ZVFHMIN:       # %bb.0:
7178; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7179; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7180; ZVFHMIN-NEXT:    vmv.v.x v12, a1
7181; ZVFHMIN-NEXT:    lui a0, 8
7182; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
7183; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
7184; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t
7185; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
7186; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7187; ZVFHMIN-NEXT:    vfmadd.vv v20, v16, v12, v0.t
7188; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7189; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t
7190; ZVFHMIN-NEXT:    ret
7191  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
7192  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
7193  %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
7194  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
7195  ret <vscale x 8 x half> %v
7196}
7197
7198define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_neg_splat_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
7199; ZVFH-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked:
7200; ZVFH:       # %bb.0:
7201; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7202; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v10
7203; ZVFH-NEXT:    ret
7204;
7205; ZVFHMIN-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked:
7206; ZVFHMIN:       # %bb.0:
7207; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7208; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7209; ZVFHMIN-NEXT:    vmv.v.x v12, a1
7210; ZVFHMIN-NEXT:    lui a0, 8
7211; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
7212; ZVFHMIN-NEXT:    vxor.vx v10, v12, a0
7213; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
7214; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
7215; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7216; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16
7217; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7218; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
7219; ZVFHMIN-NEXT:    ret
7220  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
7221  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
7222  %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7223  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7224  ret <vscale x 8 x half> %v
7225}
7226
7227define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_neg_splat_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) {
7228; ZVFH-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked_commute:
7229; ZVFH:       # %bb.0:
7230; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7231; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v10
7232; ZVFH-NEXT:    ret
7233;
7234; ZVFHMIN-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked_commute:
7235; ZVFHMIN:       # %bb.0:
7236; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7237; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
7238; ZVFHMIN-NEXT:    vmv.v.x v12, a1
7239; ZVFHMIN-NEXT:    lui a0, 8
7240; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
7241; ZVFHMIN-NEXT:    vxor.vx v10, v12, a0
7242; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
7243; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
7244; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7245; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16
7246; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7247; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20
7248; ZVFHMIN-NEXT:    ret
7249  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
7250  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
7251  %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7252  %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
7253  ret <vscale x 8 x half> %v
7254}
7255
7256declare <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
7257
7258define <vscale x 16 x half> @vfmsub_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7259; ZVFH-LABEL: vfmsub_vv_nxv16f16:
7260; ZVFH:       # %bb.0:
7261; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7262; ZVFH-NEXT:    vfmsub.vv v12, v8, v16, v0.t
7263; ZVFH-NEXT:    vmv.v.v v8, v12
7264; ZVFH-NEXT:    ret
7265;
7266; ZVFHMIN-LABEL: vfmsub_vv_nxv16f16:
7267; ZVFHMIN:       # %bb.0:
7268; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7269; ZVFHMIN-NEXT:    vmv4r.v v4, v12
7270; ZVFHMIN-NEXT:    vmv4r.v v20, v8
7271; ZVFHMIN-NEXT:    lui a0, 8
7272; ZVFHMIN-NEXT:    vxor.vx v24, v16, a0, v0.t
7273; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
7274; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
7275; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v4, v0.t
7276; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7277; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
7278; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7279; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7280; ZVFHMIN-NEXT:    ret
7281  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl)
7282  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
7283  ret <vscale x 16 x half> %v
7284}
7285
7286define <vscale x 16 x half> @vfmsub_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) {
7287; ZVFH-LABEL: vfmsub_vv_nxv16f16_unmasked:
7288; ZVFH:       # %bb.0:
7289; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7290; ZVFH-NEXT:    vfmsub.vv v8, v12, v16
7291; ZVFH-NEXT:    ret
7292;
7293; ZVFHMIN-LABEL: vfmsub_vv_nxv16f16_unmasked:
7294; ZVFHMIN:       # %bb.0:
7295; ZVFHMIN-NEXT:    lui a1, 8
7296; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7297; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
7298; ZVFHMIN-NEXT:    vxor.vx v8, v16, a1
7299; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
7300; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v12
7301; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7302; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v16
7303; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7304; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
7305; ZVFHMIN-NEXT:    ret
7306  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7307  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7308  ret <vscale x 16 x half> %v
7309}
7310
7311define <vscale x 16 x half> @vfmsub_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7312; ZVFH-LABEL: vfmsub_vf_nxv16f16:
7313; ZVFH:       # %bb.0:
7314; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7315; ZVFH-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
7316; ZVFH-NEXT:    ret
7317;
7318; ZVFHMIN-LABEL: vfmsub_vf_nxv16f16:
7319; ZVFHMIN:       # %bb.0:
7320; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7321; ZVFHMIN-NEXT:    vmv4r.v v16, v8
7322; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
7323; ZVFHMIN-NEXT:    vmv.v.x v4, a0
7324; ZVFHMIN-NEXT:    lui a0, 8
7325; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
7326; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
7327; ZVFHMIN-NEXT:    vmv8r.v v8, v24
7328; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
7329; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v4, v0.t
7330; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7331; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
7332; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7333; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7334; ZVFHMIN-NEXT:    ret
7335  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7336  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7337  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
7338  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
7339  ret <vscale x 16 x half> %v
7340}
7341
7342define <vscale x 16 x half> @vfmsub_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7343; ZVFH-LABEL: vfmsub_vf_nxv16f16_commute:
7344; ZVFH:       # %bb.0:
7345; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7346; ZVFH-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
7347; ZVFH-NEXT:    ret
7348;
7349; ZVFHMIN-LABEL: vfmsub_vf_nxv16f16_commute:
7350; ZVFHMIN:       # %bb.0:
7351; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7352; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7353; ZVFHMIN-NEXT:    vmv.v.x v4, a1
7354; ZVFHMIN-NEXT:    lui a0, 8
7355; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
7356; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
7357; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
7358; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
7359; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7360; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
7361; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7362; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
7363; ZVFHMIN-NEXT:    ret
7364  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7365  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7366  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
7367  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
7368  ret <vscale x 16 x half> %v
7369}
7370
7371define <vscale x 16 x half> @vfmsub_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
7372; ZVFH-LABEL: vfmsub_vf_nxv16f16_unmasked:
7373; ZVFH:       # %bb.0:
7374; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7375; ZVFH-NEXT:    vfmsub.vf v8, fa0, v12
7376; ZVFH-NEXT:    ret
7377;
7378; ZVFHMIN-LABEL: vfmsub_vf_nxv16f16_unmasked:
7379; ZVFHMIN:       # %bb.0:
7380; ZVFHMIN-NEXT:    addi sp, sp, -16
7381; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
7382; ZVFHMIN-NEXT:    csrr a1, vlenb
7383; ZVFHMIN-NEXT:    slli a1, a1, 2
7384; ZVFHMIN-NEXT:    sub sp, sp, a1
7385; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
7386; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7387; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7388; ZVFHMIN-NEXT:    vmv.v.x v16, a1
7389; ZVFHMIN-NEXT:    addi a0, sp, 16
7390; ZVFHMIN-NEXT:    vs4r.v v16, (a0) # Unknown-size Folded Spill
7391; ZVFHMIN-NEXT:    lui a0, 8
7392; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
7393; ZVFHMIN-NEXT:    vxor.vx v8, v12, a0
7394; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
7395; ZVFHMIN-NEXT:    addi a0, sp, 16
7396; ZVFHMIN-NEXT:    vl4r.v v8, (a0) # Unknown-size Folded Reload
7397; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
7398; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7399; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v0
7400; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7401; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
7402; ZVFHMIN-NEXT:    csrr a0, vlenb
7403; ZVFHMIN-NEXT:    slli a0, a0, 2
7404; ZVFHMIN-NEXT:    add sp, sp, a0
7405; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
7406; ZVFHMIN-NEXT:    addi sp, sp, 16
7407; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
7408; ZVFHMIN-NEXT:    ret
7409  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7410  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7411  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7412  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7413  ret <vscale x 16 x half> %v
7414}
7415
7416define <vscale x 16 x half> @vfmsub_vf_nxv16f16_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
7417; ZVFH-LABEL: vfmsub_vf_nxv16f16_unmasked_commute:
7418; ZVFH:       # %bb.0:
7419; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7420; ZVFH-NEXT:    vfmsub.vf v8, fa0, v12
7421; ZVFH-NEXT:    ret
7422;
7423; ZVFHMIN-LABEL: vfmsub_vf_nxv16f16_unmasked_commute:
7424; ZVFHMIN:       # %bb.0:
7425; ZVFHMIN-NEXT:    addi sp, sp, -16
7426; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
7427; ZVFHMIN-NEXT:    csrr a1, vlenb
7428; ZVFHMIN-NEXT:    slli a1, a1, 2
7429; ZVFHMIN-NEXT:    sub sp, sp, a1
7430; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
7431; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7432; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7433; ZVFHMIN-NEXT:    vmv.v.x v16, a1
7434; ZVFHMIN-NEXT:    addi a0, sp, 16
7435; ZVFHMIN-NEXT:    vs4r.v v16, (a0) # Unknown-size Folded Spill
7436; ZVFHMIN-NEXT:    lui a0, 8
7437; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
7438; ZVFHMIN-NEXT:    vxor.vx v8, v12, a0
7439; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
7440; ZVFHMIN-NEXT:    addi a0, sp, 16
7441; ZVFHMIN-NEXT:    vl4r.v v8, (a0) # Unknown-size Folded Reload
7442; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
7443; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7444; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v0
7445; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7446; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
7447; ZVFHMIN-NEXT:    csrr a0, vlenb
7448; ZVFHMIN-NEXT:    slli a0, a0, 2
7449; ZVFHMIN-NEXT:    add sp, sp, a0
7450; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
7451; ZVFHMIN-NEXT:    addi sp, sp, 16
7452; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
7453; ZVFHMIN-NEXT:    ret
7454  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7455  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7456  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7457  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7458  ret <vscale x 16 x half> %v
7459}
7460
7461define <vscale x 16 x half> @vfnmadd_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7462; ZVFH-LABEL: vfnmadd_vv_nxv16f16:
7463; ZVFH:       # %bb.0:
7464; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7465; ZVFH-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
7466; ZVFH-NEXT:    vmv.v.v v8, v12
7467; ZVFH-NEXT:    ret
7468;
7469; ZVFHMIN-LABEL: vfnmadd_vv_nxv16f16:
7470; ZVFHMIN:       # %bb.0:
7471; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7472; ZVFHMIN-NEXT:    vmv4r.v v4, v8
7473; ZVFHMIN-NEXT:    lui a0, 8
7474; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
7475; ZVFHMIN-NEXT:    vxor.vx v24, v16, a0, v0.t
7476; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
7477; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
7478; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
7479; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7480; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
7481; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7482; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
7483; ZVFHMIN-NEXT:    ret
7484  %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)
7485  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl)
7486  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
7487  ret <vscale x 16 x half> %v
7488}
7489
7490define <vscale x 16 x half> @vfnmadd_vv_nxv16f16_commuted(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7491; ZVFH-LABEL: vfnmadd_vv_nxv16f16_commuted:
7492; ZVFH:       # %bb.0:
7493; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7494; ZVFH-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
7495; ZVFH-NEXT:    ret
7496;
7497; ZVFHMIN-LABEL: vfnmadd_vv_nxv16f16_commuted:
7498; ZVFHMIN:       # %bb.0:
7499; ZVFHMIN-NEXT:    addi sp, sp, -16
7500; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
7501; ZVFHMIN-NEXT:    csrr a1, vlenb
7502; ZVFHMIN-NEXT:    slli a1, a1, 3
7503; ZVFHMIN-NEXT:    sub sp, sp, a1
7504; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
7505; ZVFHMIN-NEXT:    lui a1, 8
7506; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7507; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1, v0.t
7508; ZVFHMIN-NEXT:    vxor.vx v24, v16, a1, v0.t
7509; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
7510; ZVFHMIN-NEXT:    addi a0, sp, 16
7511; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
7512; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
7513; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
7514; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
7515; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7516; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
7517; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7518; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7519; ZVFHMIN-NEXT:    csrr a0, vlenb
7520; ZVFHMIN-NEXT:    slli a0, a0, 3
7521; ZVFHMIN-NEXT:    add sp, sp, a0
7522; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
7523; ZVFHMIN-NEXT:    addi sp, sp, 16
7524; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
7525; ZVFHMIN-NEXT:    ret
7526  %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)
7527  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl)
7528  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
7529  ret <vscale x 16 x half> %v
7530}
7531
7532define <vscale x 16 x half> @vfnmadd_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) {
7533; ZVFH-LABEL: vfnmadd_vv_nxv16f16_unmasked:
7534; ZVFH:       # %bb.0:
7535; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7536; ZVFH-NEXT:    vfnmadd.vv v8, v12, v16
7537; ZVFH-NEXT:    ret
7538;
7539; ZVFHMIN-LABEL: vfnmadd_vv_nxv16f16_unmasked:
7540; ZVFHMIN:       # %bb.0:
7541; ZVFHMIN-NEXT:    lui a1, 8
7542; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7543; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1
7544; ZVFHMIN-NEXT:    vxor.vx v16, v16, a1
7545; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
7546; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
7547; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
7548; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7549; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
7550; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7551; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
7552; ZVFHMIN-NEXT:    ret
7553  %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7554  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7555  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7556  ret <vscale x 16 x half> %v
7557}
7558
7559define <vscale x 16 x half> @vfnmadd_vv_nxv16f16_unmasked_commuted(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) {
7560; ZVFH-LABEL: vfnmadd_vv_nxv16f16_unmasked_commuted:
7561; ZVFH:       # %bb.0:
7562; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7563; ZVFH-NEXT:    vfnmadd.vv v8, v12, v16
7564; ZVFH-NEXT:    ret
7565;
7566; ZVFHMIN-LABEL: vfnmadd_vv_nxv16f16_unmasked_commuted:
7567; ZVFHMIN:       # %bb.0:
7568; ZVFHMIN-NEXT:    lui a1, 8
7569; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7570; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1
7571; ZVFHMIN-NEXT:    vxor.vx v16, v16, a1
7572; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
7573; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
7574; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
7575; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7576; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
7577; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7578; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
7579; ZVFHMIN-NEXT:    ret
7580  %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7581  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7582  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7583  ret <vscale x 16 x half> %v
7584}
7585
7586define <vscale x 16 x half> @vfnmadd_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7587; ZVFH-LABEL: vfnmadd_vf_nxv16f16:
7588; ZVFH:       # %bb.0:
7589; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7590; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
7591; ZVFH-NEXT:    ret
7592;
7593; ZVFHMIN-LABEL: vfnmadd_vf_nxv16f16:
7594; ZVFHMIN:       # %bb.0:
7595; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7596; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7597; ZVFHMIN-NEXT:    vmv.v.x v4, a1
7598; ZVFHMIN-NEXT:    lui a0, 8
7599; ZVFHMIN-NEXT:    vxor.vx v20, v8, a0, v0.t
7600; ZVFHMIN-NEXT:    vxor.vx v24, v12, a0, v0.t
7601; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
7602; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
7603; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v4, v0.t
7604; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7605; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
7606; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7607; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7608; ZVFHMIN-NEXT:    ret
7609  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7610  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7611  %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl)
7612  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
7613  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
7614  ret <vscale x 16 x half> %v
7615}
7616
7617define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7618; ZVFH-LABEL: vfnmadd_vf_nxv16f16_commute:
7619; ZVFH:       # %bb.0:
7620; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7621; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
7622; ZVFH-NEXT:    ret
7623;
7624; ZVFHMIN-LABEL: vfnmadd_vf_nxv16f16_commute:
7625; ZVFHMIN:       # %bb.0:
7626; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7627; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7628; ZVFHMIN-NEXT:    vmv.v.x v4, a1
7629; ZVFHMIN-NEXT:    lui a0, 8
7630; ZVFHMIN-NEXT:    vxor.vx v28, v8, a0, v0.t
7631; ZVFHMIN-NEXT:    vxor.vx v16, v12, a0, v0.t
7632; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t
7633; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
7634; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v4, v0.t
7635; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7636; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
7637; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7638; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7639; ZVFHMIN-NEXT:    ret
7640  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7641  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7642  %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl)
7643  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
7644  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
7645  ret <vscale x 16 x half> %v
7646}
7647
7648define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
7649; ZVFH-LABEL: vfnmadd_vf_nxv16f16_unmasked:
7650; ZVFH:       # %bb.0:
7651; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7652; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v12
7653; ZVFH-NEXT:    ret
7654;
7655; ZVFHMIN-LABEL: vfnmadd_vf_nxv16f16_unmasked:
7656; ZVFHMIN:       # %bb.0:
7657; ZVFHMIN-NEXT:    addi sp, sp, -16
7658; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
7659; ZVFHMIN-NEXT:    csrr a1, vlenb
7660; ZVFHMIN-NEXT:    slli a1, a1, 2
7661; ZVFHMIN-NEXT:    sub sp, sp, a1
7662; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
7663; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7664; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7665; ZVFHMIN-NEXT:    vmv.v.x v16, a1
7666; ZVFHMIN-NEXT:    addi a0, sp, 16
7667; ZVFHMIN-NEXT:    vs4r.v v16, (a0) # Unknown-size Folded Spill
7668; ZVFHMIN-NEXT:    lui a0, 8
7669; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
7670; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0
7671; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
7672; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
7673; ZVFHMIN-NEXT:    addi a0, sp, 16
7674; ZVFHMIN-NEXT:    vl4r.v v8, (a0) # Unknown-size Folded Reload
7675; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
7676; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7677; ZVFHMIN-NEXT:    vfmadd.vv v16, v0, v24
7678; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7679; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
7680; ZVFHMIN-NEXT:    csrr a0, vlenb
7681; ZVFHMIN-NEXT:    slli a0, a0, 2
7682; ZVFHMIN-NEXT:    add sp, sp, a0
7683; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
7684; ZVFHMIN-NEXT:    addi sp, sp, 16
7685; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
7686; ZVFHMIN-NEXT:    ret
7687  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7688  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7689  %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7690  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7691  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7692  ret <vscale x 16 x half> %v
7693}
7694
7695define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
7696; ZVFH-LABEL: vfnmadd_vf_nxv16f16_unmasked_commute:
7697; ZVFH:       # %bb.0:
7698; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7699; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v12
7700; ZVFH-NEXT:    ret
7701;
7702; ZVFHMIN-LABEL: vfnmadd_vf_nxv16f16_unmasked_commute:
7703; ZVFHMIN:       # %bb.0:
7704; ZVFHMIN-NEXT:    addi sp, sp, -16
7705; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
7706; ZVFHMIN-NEXT:    csrr a1, vlenb
7707; ZVFHMIN-NEXT:    slli a1, a1, 2
7708; ZVFHMIN-NEXT:    sub sp, sp, a1
7709; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
7710; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7711; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7712; ZVFHMIN-NEXT:    vmv.v.x v16, a1
7713; ZVFHMIN-NEXT:    addi a0, sp, 16
7714; ZVFHMIN-NEXT:    vs4r.v v16, (a0) # Unknown-size Folded Spill
7715; ZVFHMIN-NEXT:    lui a0, 8
7716; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
7717; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0
7718; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
7719; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
7720; ZVFHMIN-NEXT:    addi a0, sp, 16
7721; ZVFHMIN-NEXT:    vl4r.v v8, (a0) # Unknown-size Folded Reload
7722; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
7723; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7724; ZVFHMIN-NEXT:    vfmadd.vv v16, v0, v24
7725; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7726; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
7727; ZVFHMIN-NEXT:    csrr a0, vlenb
7728; ZVFHMIN-NEXT:    slli a0, a0, 2
7729; ZVFHMIN-NEXT:    add sp, sp, a0
7730; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
7731; ZVFHMIN-NEXT:    addi sp, sp, 16
7732; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
7733; ZVFHMIN-NEXT:    ret
7734  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7735  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7736  %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7737  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7738  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7739  ret <vscale x 16 x half> %v
7740}
7741
7742define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_neg_splat(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7743; ZVFH-LABEL: vfnmadd_vf_nxv16f16_neg_splat:
7744; ZVFH:       # %bb.0:
7745; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7746; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
7747; ZVFH-NEXT:    ret
7748;
7749; ZVFHMIN-LABEL: vfnmadd_vf_nxv16f16_neg_splat:
7750; ZVFHMIN:       # %bb.0:
7751; ZVFHMIN-NEXT:    addi sp, sp, -16
7752; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
7753; ZVFHMIN-NEXT:    csrr a1, vlenb
7754; ZVFHMIN-NEXT:    slli a1, a1, 2
7755; ZVFHMIN-NEXT:    sub sp, sp, a1
7756; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
7757; ZVFHMIN-NEXT:    addi a1, sp, 16
7758; ZVFHMIN-NEXT:    vs4r.v v8, (a1) # Unknown-size Folded Spill
7759; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7760; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7761; ZVFHMIN-NEXT:    vmv.v.x v16, a1
7762; ZVFHMIN-NEXT:    lui a0, 8
7763; ZVFHMIN-NEXT:    vxor.vx v4, v16, a0, v0.t
7764; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
7765; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
7766; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v4, v0.t
7767; ZVFHMIN-NEXT:    addi a0, sp, 16
7768; ZVFHMIN-NEXT:    vl4r.v v4, (a0) # Unknown-size Folded Reload
7769; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
7770; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7771; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
7772; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7773; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
7774; ZVFHMIN-NEXT:    csrr a0, vlenb
7775; ZVFHMIN-NEXT:    slli a0, a0, 2
7776; ZVFHMIN-NEXT:    add sp, sp, a0
7777; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
7778; ZVFHMIN-NEXT:    addi sp, sp, 16
7779; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
7780; ZVFHMIN-NEXT:    ret
7781  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7782  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7783  %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
7784  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
7785  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
7786  ret <vscale x 16 x half> %v
7787}
7788
7789define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_neg_splat_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7790; ZVFH-LABEL: vfnmadd_vf_nxv16f16_neg_splat_commute:
7791; ZVFH:       # %bb.0:
7792; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7793; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
7794; ZVFH-NEXT:    ret
7795;
7796; ZVFHMIN-LABEL: vfnmadd_vf_nxv16f16_neg_splat_commute:
7797; ZVFHMIN:       # %bb.0:
7798; ZVFHMIN-NEXT:    addi sp, sp, -16
7799; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
7800; ZVFHMIN-NEXT:    csrr a1, vlenb
7801; ZVFHMIN-NEXT:    slli a1, a1, 2
7802; ZVFHMIN-NEXT:    sub sp, sp, a1
7803; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
7804; ZVFHMIN-NEXT:    addi a1, sp, 16
7805; ZVFHMIN-NEXT:    vs4r.v v8, (a1) # Unknown-size Folded Spill
7806; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7807; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7808; ZVFHMIN-NEXT:    vmv.v.x v16, a1
7809; ZVFHMIN-NEXT:    lui a0, 8
7810; ZVFHMIN-NEXT:    vxor.vx v4, v16, a0, v0.t
7811; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
7812; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
7813; ZVFHMIN-NEXT:    vmv8r.v v8, v16
7814; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v4, v0.t
7815; ZVFHMIN-NEXT:    addi a0, sp, 16
7816; ZVFHMIN-NEXT:    vl4r.v v4, (a0) # Unknown-size Folded Reload
7817; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v4, v0.t
7818; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7819; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
7820; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7821; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7822; ZVFHMIN-NEXT:    csrr a0, vlenb
7823; ZVFHMIN-NEXT:    slli a0, a0, 2
7824; ZVFHMIN-NEXT:    add sp, sp, a0
7825; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
7826; ZVFHMIN-NEXT:    addi sp, sp, 16
7827; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
7828; ZVFHMIN-NEXT:    ret
7829  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7830  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7831  %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
7832  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
7833  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
7834  ret <vscale x 16 x half> %v
7835}
7836
7837define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_neg_splat_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
7838; ZVFH-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked:
7839; ZVFH:       # %bb.0:
7840; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7841; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v12
7842; ZVFH-NEXT:    ret
7843;
7844; ZVFHMIN-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked:
7845; ZVFHMIN:       # %bb.0:
7846; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7847; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7848; ZVFHMIN-NEXT:    vmv.v.x v16, a1
7849; ZVFHMIN-NEXT:    lui a0, 8
7850; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0
7851; ZVFHMIN-NEXT:    vxor.vx v16, v16, a0
7852; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
7853; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
7854; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
7855; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7856; ZVFHMIN-NEXT:    vfmadd.vv v16, v0, v24
7857; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7858; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
7859; ZVFHMIN-NEXT:    ret
7860  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7861  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7862  %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7863  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7864  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7865  ret <vscale x 16 x half> %v
7866}
7867
7868define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_neg_splat_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
7869; ZVFH-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked_commute:
7870; ZVFH:       # %bb.0:
7871; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7872; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v12
7873; ZVFH-NEXT:    ret
7874;
7875; ZVFHMIN-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked_commute:
7876; ZVFHMIN:       # %bb.0:
7877; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
7878; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7879; ZVFHMIN-NEXT:    vmv.v.x v16, a1
7880; ZVFHMIN-NEXT:    lui a0, 8
7881; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0
7882; ZVFHMIN-NEXT:    vxor.vx v16, v16, a0
7883; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
7884; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
7885; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
7886; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7887; ZVFHMIN-NEXT:    vfmadd.vv v16, v0, v24
7888; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7889; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
7890; ZVFHMIN-NEXT:    ret
7891  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
7892  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
7893  %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7894  %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7895  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7896  ret <vscale x 16 x half> %v
7897}
7898
7899define <vscale x 16 x half> @vfnmsub_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7900; ZVFH-LABEL: vfnmsub_vv_nxv16f16:
7901; ZVFH:       # %bb.0:
7902; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7903; ZVFH-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
7904; ZVFH-NEXT:    vmv.v.v v8, v12
7905; ZVFH-NEXT:    ret
7906;
7907; ZVFHMIN-LABEL: vfnmsub_vv_nxv16f16:
7908; ZVFHMIN:       # %bb.0:
7909; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7910; ZVFHMIN-NEXT:    vmv4r.v v4, v8
7911; ZVFHMIN-NEXT:    lui a0, 8
7912; ZVFHMIN-NEXT:    vxor.vx v12, v12, a0, v0.t
7913; ZVFHMIN-NEXT:    vxor.vx v24, v16, a0, v0.t
7914; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
7915; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
7916; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
7917; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7918; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
7919; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7920; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
7921; ZVFHMIN-NEXT:    ret
7922  %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)
7923  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl)
7924  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
7925  ret <vscale x 16 x half> %v
7926}
7927
7928define <vscale x 16 x half> @vfnmsub_vv_nxv16f16_commuted(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
7929; ZVFH-LABEL: vfnmsub_vv_nxv16f16_commuted:
7930; ZVFH:       # %bb.0:
7931; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7932; ZVFH-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
7933; ZVFH-NEXT:    ret
7934;
7935; ZVFHMIN-LABEL: vfnmsub_vv_nxv16f16_commuted:
7936; ZVFHMIN:       # %bb.0:
7937; ZVFHMIN-NEXT:    addi sp, sp, -16
7938; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
7939; ZVFHMIN-NEXT:    csrr a1, vlenb
7940; ZVFHMIN-NEXT:    slli a1, a1, 3
7941; ZVFHMIN-NEXT:    sub sp, sp, a1
7942; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
7943; ZVFHMIN-NEXT:    lui a1, 8
7944; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7945; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1, v0.t
7946; ZVFHMIN-NEXT:    vxor.vx v24, v16, a1, v0.t
7947; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
7948; ZVFHMIN-NEXT:    addi a0, sp, 16
7949; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
7950; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
7951; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
7952; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
7953; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7954; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
7955; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7956; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
7957; ZVFHMIN-NEXT:    csrr a0, vlenb
7958; ZVFHMIN-NEXT:    slli a0, a0, 3
7959; ZVFHMIN-NEXT:    add sp, sp, a0
7960; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
7961; ZVFHMIN-NEXT:    addi sp, sp, 16
7962; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
7963; ZVFHMIN-NEXT:    ret
7964  %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)
7965  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl)
7966  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
7967  ret <vscale x 16 x half> %v
7968}
7969
7970define <vscale x 16 x half> @vfnmsub_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) {
7971; ZVFH-LABEL: vfnmsub_vv_nxv16f16_unmasked:
7972; ZVFH:       # %bb.0:
7973; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7974; ZVFH-NEXT:    vfnmadd.vv v8, v12, v16
7975; ZVFH-NEXT:    ret
7976;
7977; ZVFHMIN-LABEL: vfnmsub_vv_nxv16f16_unmasked:
7978; ZVFHMIN:       # %bb.0:
7979; ZVFHMIN-NEXT:    lui a1, 8
7980; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
7981; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1
7982; ZVFHMIN-NEXT:    vxor.vx v16, v16, a1
7983; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
7984; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
7985; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
7986; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
7987; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
7988; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
7989; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
7990; ZVFHMIN-NEXT:    ret
7991  %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7992  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7993  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
7994  ret <vscale x 16 x half> %v
7995}
7996
7997define <vscale x 16 x half> @vfnmsub_vv_nxv16f16_unmasked_commuted(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) {
7998; ZVFH-LABEL: vfnmsub_vv_nxv16f16_unmasked_commuted:
7999; ZVFH:       # %bb.0:
8000; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8001; ZVFH-NEXT:    vfnmadd.vv v8, v12, v16
8002; ZVFH-NEXT:    ret
8003;
8004; ZVFHMIN-LABEL: vfnmsub_vv_nxv16f16_unmasked_commuted:
8005; ZVFHMIN:       # %bb.0:
8006; ZVFHMIN-NEXT:    lui a1, 8
8007; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8008; ZVFHMIN-NEXT:    vxor.vx v12, v12, a1
8009; ZVFHMIN-NEXT:    vxor.vx v16, v16, a1
8010; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
8011; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
8012; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
8013; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8014; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
8015; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8016; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
8017; ZVFHMIN-NEXT:    ret
8018  %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8019  %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8020  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8021  ret <vscale x 16 x half> %v
8022}
8023
8024define <vscale x 16 x half> @vfnmsub_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
8025; ZVFH-LABEL: vfnmsub_vf_nxv16f16:
8026; ZVFH:       # %bb.0:
8027; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8028; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
8029; ZVFH-NEXT:    ret
8030;
8031; ZVFHMIN-LABEL: vfnmsub_vf_nxv16f16:
8032; ZVFHMIN:       # %bb.0:
8033; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8034; ZVFHMIN-NEXT:    vmv4r.v v16, v12
8035; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
8036; ZVFHMIN-NEXT:    vmv.v.x v4, a0
8037; ZVFHMIN-NEXT:    lui a0, 8
8038; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
8039; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
8040; ZVFHMIN-NEXT:    vmv8r.v v8, v24
8041; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
8042; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v4, v0.t
8043; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8044; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
8045; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8046; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
8047; ZVFHMIN-NEXT:    ret
8048  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
8049  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
8050  %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl)
8051  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
8052  ret <vscale x 16 x half> %v
8053}
8054
8055define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
8056; ZVFH-LABEL: vfnmsub_vf_nxv16f16_commute:
8057; ZVFH:       # %bb.0:
8058; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8059; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
8060; ZVFH-NEXT:    ret
8061;
8062; ZVFHMIN-LABEL: vfnmsub_vf_nxv16f16_commute:
8063; ZVFHMIN:       # %bb.0:
8064; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
8065; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8066; ZVFHMIN-NEXT:    vmv.v.x v4, a1
8067; ZVFHMIN-NEXT:    lui a0, 8
8068; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0, v0.t
8069; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
8070; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
8071; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
8072; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8073; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
8074; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8075; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
8076; ZVFHMIN-NEXT:    ret
8077  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
8078  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
8079  %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl)
8080  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
8081  ret <vscale x 16 x half> %v
8082}
8083
8084define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
8085; ZVFH-LABEL: vfnmsub_vf_nxv16f16_unmasked:
8086; ZVFH:       # %bb.0:
8087; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8088; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v12
8089; ZVFH-NEXT:    ret
8090;
8091; ZVFHMIN-LABEL: vfnmsub_vf_nxv16f16_unmasked:
8092; ZVFHMIN:       # %bb.0:
8093; ZVFHMIN-NEXT:    addi sp, sp, -16
8094; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
8095; ZVFHMIN-NEXT:    csrr a1, vlenb
8096; ZVFHMIN-NEXT:    slli a1, a1, 2
8097; ZVFHMIN-NEXT:    sub sp, sp, a1
8098; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
8099; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
8100; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8101; ZVFHMIN-NEXT:    vmv.v.x v16, a1
8102; ZVFHMIN-NEXT:    addi a0, sp, 16
8103; ZVFHMIN-NEXT:    vs4r.v v16, (a0) # Unknown-size Folded Spill
8104; ZVFHMIN-NEXT:    lui a0, 8
8105; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
8106; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
8107; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
8108; ZVFHMIN-NEXT:    addi a0, sp, 16
8109; ZVFHMIN-NEXT:    vl4r.v v8, (a0) # Unknown-size Folded Reload
8110; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
8111; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8112; ZVFHMIN-NEXT:    vfmadd.vv v16, v0, v24
8113; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8114; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
8115; ZVFHMIN-NEXT:    csrr a0, vlenb
8116; ZVFHMIN-NEXT:    slli a0, a0, 2
8117; ZVFHMIN-NEXT:    add sp, sp, a0
8118; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
8119; ZVFHMIN-NEXT:    addi sp, sp, 16
8120; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
8121; ZVFHMIN-NEXT:    ret
8122  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
8123  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
8124  %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8125  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8126  ret <vscale x 16 x half> %v
8127}
8128
8129define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
8130; ZVFH-LABEL: vfnmsub_vf_nxv16f16_unmasked_commute:
8131; ZVFH:       # %bb.0:
8132; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8133; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v12
8134; ZVFH-NEXT:    ret
8135;
8136; ZVFHMIN-LABEL: vfnmsub_vf_nxv16f16_unmasked_commute:
8137; ZVFHMIN:       # %bb.0:
8138; ZVFHMIN-NEXT:    addi sp, sp, -16
8139; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
8140; ZVFHMIN-NEXT:    csrr a1, vlenb
8141; ZVFHMIN-NEXT:    slli a1, a1, 2
8142; ZVFHMIN-NEXT:    sub sp, sp, a1
8143; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb
8144; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
8145; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8146; ZVFHMIN-NEXT:    vmv.v.x v16, a1
8147; ZVFHMIN-NEXT:    addi a0, sp, 16
8148; ZVFHMIN-NEXT:    vs4r.v v16, (a0) # Unknown-size Folded Spill
8149; ZVFHMIN-NEXT:    lui a0, 8
8150; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
8151; ZVFHMIN-NEXT:    vxor.vx v8, v8, a0
8152; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
8153; ZVFHMIN-NEXT:    addi a0, sp, 16
8154; ZVFHMIN-NEXT:    vl4r.v v8, (a0) # Unknown-size Folded Reload
8155; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
8156; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8157; ZVFHMIN-NEXT:    vfmadd.vv v16, v0, v24
8158; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8159; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
8160; ZVFHMIN-NEXT:    csrr a0, vlenb
8161; ZVFHMIN-NEXT:    slli a0, a0, 2
8162; ZVFHMIN-NEXT:    add sp, sp, a0
8163; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
8164; ZVFHMIN-NEXT:    addi sp, sp, 16
8165; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
8166; ZVFHMIN-NEXT:    ret
8167  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
8168  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
8169  %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8170  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8171  ret <vscale x 16 x half> %v
8172}
8173
8174define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_neg_splat(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
8175; ZVFH-LABEL: vfnmsub_vf_nxv16f16_neg_splat:
8176; ZVFH:       # %bb.0:
8177; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8178; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
8179; ZVFH-NEXT:    ret
8180;
8181; ZVFHMIN-LABEL: vfnmsub_vf_nxv16f16_neg_splat:
8182; ZVFHMIN:       # %bb.0:
8183; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8184; ZVFHMIN-NEXT:    vmv4r.v v4, v8
8185; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
8186; ZVFHMIN-NEXT:    vmv.v.x v16, a0
8187; ZVFHMIN-NEXT:    lui a0, 8
8188; ZVFHMIN-NEXT:    vxor.vx v24, v16, a0, v0.t
8189; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
8190; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
8191; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
8192; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8193; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
8194; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8195; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
8196; ZVFHMIN-NEXT:    ret
8197  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
8198  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
8199  %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
8200  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
8201  ret <vscale x 16 x half> %v
8202}
8203
8204define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_neg_splat_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
8205; ZVFH-LABEL: vfnmsub_vf_nxv16f16_neg_splat_commute:
8206; ZVFH:       # %bb.0:
8207; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8208; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
8209; ZVFH-NEXT:    ret
8210;
8211; ZVFHMIN-LABEL: vfnmsub_vf_nxv16f16_neg_splat_commute:
8212; ZVFHMIN:       # %bb.0:
8213; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8214; ZVFHMIN-NEXT:    vmv4r.v v20, v12
8215; ZVFHMIN-NEXT:    vmv4r.v v4, v8
8216; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
8217; ZVFHMIN-NEXT:    vmv.v.x v16, a0
8218; ZVFHMIN-NEXT:    lui a0, 8
8219; ZVFHMIN-NEXT:    vxor.vx v24, v16, a0, v0.t
8220; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
8221; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
8222; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v4, v0.t
8223; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8224; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
8225; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8226; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
8227; ZVFHMIN-NEXT:    ret
8228  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
8229  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
8230  %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
8231  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
8232  ret <vscale x 16 x half> %v
8233}
8234
8235define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_neg_splat_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
8236; ZVFH-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked:
8237; ZVFH:       # %bb.0:
8238; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8239; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v12
8240; ZVFH-NEXT:    ret
8241;
8242; ZVFHMIN-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked:
8243; ZVFHMIN:       # %bb.0:
8244; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
8245; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8246; ZVFHMIN-NEXT:    vmv.v.x v16, a1
8247; ZVFHMIN-NEXT:    lui a0, 8
8248; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
8249; ZVFHMIN-NEXT:    vxor.vx v12, v16, a0
8250; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
8251; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
8252; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8253; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
8254; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8255; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
8256; ZVFHMIN-NEXT:    ret
8257  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
8258  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
8259  %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8260  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8261  ret <vscale x 16 x half> %v
8262}
8263
8264define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_neg_splat_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) {
8265; ZVFH-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked_commute:
8266; ZVFH:       # %bb.0:
8267; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8268; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v12
8269; ZVFH-NEXT:    ret
8270;
8271; ZVFHMIN-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked_commute:
8272; ZVFHMIN:       # %bb.0:
8273; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
8274; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8275; ZVFHMIN-NEXT:    vmv.v.x v16, a1
8276; ZVFHMIN-NEXT:    lui a0, 8
8277; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
8278; ZVFHMIN-NEXT:    vxor.vx v12, v16, a0
8279; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
8280; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
8281; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8282; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
8283; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8284; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
8285; ZVFHMIN-NEXT:    ret
8286  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
8287  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
8288  %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8289  %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
8290  ret <vscale x 16 x half> %v
8291}
8292
8293declare <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
8294
8295define <vscale x 32 x half> @vfmsub_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
8296; ZVFH-LABEL: vfmsub_vv_nxv32f16:
8297; ZVFH:       # %bb.0:
8298; ZVFH-NEXT:    vl8re16.v v24, (a0)
8299; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
8300; ZVFH-NEXT:    vfmsub.vv v16, v8, v24, v0.t
8301; ZVFH-NEXT:    vmv.v.v v8, v16
8302; ZVFH-NEXT:    ret
8303;
8304; ZVFHMIN-LABEL: vfmsub_vv_nxv32f16:
8305; ZVFHMIN:       # %bb.0:
8306; ZVFHMIN-NEXT:    addi sp, sp, -16
8307; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
8308; ZVFHMIN-NEXT:    csrr a2, vlenb
8309; ZVFHMIN-NEXT:    slli a2, a2, 4
8310; ZVFHMIN-NEXT:    mv a3, a2
8311; ZVFHMIN-NEXT:    slli a2, a2, 1
8312; ZVFHMIN-NEXT:    add a2, a2, a3
8313; ZVFHMIN-NEXT:    sub sp, sp, a2
8314; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x30, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 48 * vlenb
8315; ZVFHMIN-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
8316; ZVFHMIN-NEXT:    vmv1r.v v7, v0
8317; ZVFHMIN-NEXT:    csrr a2, vlenb
8318; ZVFHMIN-NEXT:    slli a2, a2, 3
8319; ZVFHMIN-NEXT:    mv a3, a2
8320; ZVFHMIN-NEXT:    slli a2, a2, 2
8321; ZVFHMIN-NEXT:    add a2, a2, a3
8322; ZVFHMIN-NEXT:    add a2, sp, a2
8323; ZVFHMIN-NEXT:    addi a2, a2, 16
8324; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
8325; ZVFHMIN-NEXT:    csrr a2, vlenb
8326; ZVFHMIN-NEXT:    slli a2, a2, 5
8327; ZVFHMIN-NEXT:    add a2, sp, a2
8328; ZVFHMIN-NEXT:    addi a2, a2, 16
8329; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8330; ZVFHMIN-NEXT:    vl8re16.v v8, (a0)
8331; ZVFHMIN-NEXT:    lui a2, 8
8332; ZVFHMIN-NEXT:    csrr a3, vlenb
8333; ZVFHMIN-NEXT:    slli a0, a3, 1
8334; ZVFHMIN-NEXT:    srli a3, a3, 2
8335; ZVFHMIN-NEXT:    sub a4, a1, a0
8336; ZVFHMIN-NEXT:    vslidedown.vx v6, v0, a3
8337; ZVFHMIN-NEXT:    sltu a3, a1, a4
8338; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
8339; ZVFHMIN-NEXT:    vxor.vx v8, v8, a2, v0.t
8340; ZVFHMIN-NEXT:    addi a3, a3, -1
8341; ZVFHMIN-NEXT:    and a3, a3, a4
8342; ZVFHMIN-NEXT:    vmv1r.v v0, v6
8343; ZVFHMIN-NEXT:    csrr a2, vlenb
8344; ZVFHMIN-NEXT:    slli a2, a2, 3
8345; ZVFHMIN-NEXT:    mv a4, a2
8346; ZVFHMIN-NEXT:    slli a2, a2, 1
8347; ZVFHMIN-NEXT:    add a2, a2, a4
8348; ZVFHMIN-NEXT:    add a2, sp, a2
8349; ZVFHMIN-NEXT:    addi a2, a2, 16
8350; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8351; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
8352; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
8353; ZVFHMIN-NEXT:    csrr a2, vlenb
8354; ZVFHMIN-NEXT:    slli a2, a2, 4
8355; ZVFHMIN-NEXT:    add a2, sp, a2
8356; ZVFHMIN-NEXT:    addi a2, a2, 16
8357; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
8358; ZVFHMIN-NEXT:    csrr a2, vlenb
8359; ZVFHMIN-NEXT:    slli a2, a2, 5
8360; ZVFHMIN-NEXT:    add a2, sp, a2
8361; ZVFHMIN-NEXT:    addi a2, a2, 16
8362; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
8363; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
8364; ZVFHMIN-NEXT:    csrr a2, vlenb
8365; ZVFHMIN-NEXT:    slli a2, a2, 3
8366; ZVFHMIN-NEXT:    add a2, sp, a2
8367; ZVFHMIN-NEXT:    addi a2, a2, 16
8368; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8369; ZVFHMIN-NEXT:    csrr a2, vlenb
8370; ZVFHMIN-NEXT:    slli a2, a2, 3
8371; ZVFHMIN-NEXT:    mv a3, a2
8372; ZVFHMIN-NEXT:    slli a2, a2, 2
8373; ZVFHMIN-NEXT:    add a2, a2, a3
8374; ZVFHMIN-NEXT:    add a2, sp, a2
8375; ZVFHMIN-NEXT:    addi a2, a2, 16
8376; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
8377; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
8378; ZVFHMIN-NEXT:    addi a2, sp, 16
8379; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
8380; ZVFHMIN-NEXT:    csrr a2, vlenb
8381; ZVFHMIN-NEXT:    slli a2, a2, 4
8382; ZVFHMIN-NEXT:    add a2, sp, a2
8383; ZVFHMIN-NEXT:    addi a2, a2, 16
8384; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
8385; ZVFHMIN-NEXT:    csrr a2, vlenb
8386; ZVFHMIN-NEXT:    slli a2, a2, 3
8387; ZVFHMIN-NEXT:    add a2, sp, a2
8388; ZVFHMIN-NEXT:    addi a2, a2, 16
8389; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
8390; ZVFHMIN-NEXT:    addi a2, sp, 16
8391; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
8392; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8393; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
8394; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8395; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
8396; ZVFHMIN-NEXT:    csrr a2, vlenb
8397; ZVFHMIN-NEXT:    slli a2, a2, 3
8398; ZVFHMIN-NEXT:    add a2, sp, a2
8399; ZVFHMIN-NEXT:    addi a2, a2, 16
8400; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8401; ZVFHMIN-NEXT:    bltu a1, a0, .LBB280_2
8402; ZVFHMIN-NEXT:  # %bb.1:
8403; ZVFHMIN-NEXT:    mv a1, a0
8404; ZVFHMIN-NEXT:  .LBB280_2:
8405; ZVFHMIN-NEXT:    vmv1r.v v0, v7
8406; ZVFHMIN-NEXT:    csrr a0, vlenb
8407; ZVFHMIN-NEXT:    slli a0, a0, 3
8408; ZVFHMIN-NEXT:    mv a2, a0
8409; ZVFHMIN-NEXT:    slli a0, a0, 1
8410; ZVFHMIN-NEXT:    add a0, a0, a2
8411; ZVFHMIN-NEXT:    add a0, sp, a0
8412; ZVFHMIN-NEXT:    addi a0, a0, 16
8413; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
8414; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
8415; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
8416; ZVFHMIN-NEXT:    csrr a0, vlenb
8417; ZVFHMIN-NEXT:    slli a0, a0, 4
8418; ZVFHMIN-NEXT:    add a0, sp, a0
8419; ZVFHMIN-NEXT:    addi a0, a0, 16
8420; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
8421; ZVFHMIN-NEXT:    csrr a0, vlenb
8422; ZVFHMIN-NEXT:    slli a0, a0, 5
8423; ZVFHMIN-NEXT:    add a0, sp, a0
8424; ZVFHMIN-NEXT:    addi a0, a0, 16
8425; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
8426; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
8427; ZVFHMIN-NEXT:    csrr a0, vlenb
8428; ZVFHMIN-NEXT:    slli a0, a0, 3
8429; ZVFHMIN-NEXT:    mv a1, a0
8430; ZVFHMIN-NEXT:    slli a0, a0, 1
8431; ZVFHMIN-NEXT:    add a0, a0, a1
8432; ZVFHMIN-NEXT:    add a0, sp, a0
8433; ZVFHMIN-NEXT:    addi a0, a0, 16
8434; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
8435; ZVFHMIN-NEXT:    csrr a0, vlenb
8436; ZVFHMIN-NEXT:    slli a0, a0, 3
8437; ZVFHMIN-NEXT:    mv a1, a0
8438; ZVFHMIN-NEXT:    slli a0, a0, 2
8439; ZVFHMIN-NEXT:    add a0, a0, a1
8440; ZVFHMIN-NEXT:    add a0, sp, a0
8441; ZVFHMIN-NEXT:    addi a0, a0, 16
8442; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
8443; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t
8444; ZVFHMIN-NEXT:    csrr a0, vlenb
8445; ZVFHMIN-NEXT:    slli a0, a0, 4
8446; ZVFHMIN-NEXT:    add a0, sp, a0
8447; ZVFHMIN-NEXT:    addi a0, a0, 16
8448; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
8449; ZVFHMIN-NEXT:    csrr a0, vlenb
8450; ZVFHMIN-NEXT:    slli a0, a0, 3
8451; ZVFHMIN-NEXT:    mv a1, a0
8452; ZVFHMIN-NEXT:    slli a0, a0, 1
8453; ZVFHMIN-NEXT:    add a0, a0, a1
8454; ZVFHMIN-NEXT:    add a0, sp, a0
8455; ZVFHMIN-NEXT:    addi a0, a0, 16
8456; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
8457; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8458; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
8459; ZVFHMIN-NEXT:    vmv.v.v v16, v8
8460; ZVFHMIN-NEXT:    csrr a0, vlenb
8461; ZVFHMIN-NEXT:    slli a0, a0, 3
8462; ZVFHMIN-NEXT:    add a0, sp, a0
8463; ZVFHMIN-NEXT:    addi a0, a0, 16
8464; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
8465; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8466; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
8467; ZVFHMIN-NEXT:    csrr a0, vlenb
8468; ZVFHMIN-NEXT:    slli a0, a0, 4
8469; ZVFHMIN-NEXT:    mv a1, a0
8470; ZVFHMIN-NEXT:    slli a0, a0, 1
8471; ZVFHMIN-NEXT:    add a0, a0, a1
8472; ZVFHMIN-NEXT:    add sp, sp, a0
8473; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
8474; ZVFHMIN-NEXT:    addi sp, sp, 16
8475; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
8476; ZVFHMIN-NEXT:    ret
8477  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl)
8478  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
8479  ret <vscale x 32 x half> %v
8480}
8481
8482define <vscale x 32 x half> @vfmsub_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) {
8483; ZVFH-LABEL: vfmsub_vv_nxv32f16_unmasked:
8484; ZVFH:       # %bb.0:
8485; ZVFH-NEXT:    vl8re16.v v24, (a0)
8486; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
8487; ZVFH-NEXT:    vfmsub.vv v8, v16, v24
8488; ZVFH-NEXT:    ret
8489;
8490; ZVFHMIN-LABEL: vfmsub_vv_nxv32f16_unmasked:
8491; ZVFHMIN:       # %bb.0:
8492; ZVFHMIN-NEXT:    addi sp, sp, -16
8493; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
8494; ZVFHMIN-NEXT:    csrr a2, vlenb
8495; ZVFHMIN-NEXT:    slli a2, a2, 5
8496; ZVFHMIN-NEXT:    sub sp, sp, a2
8497; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
8498; ZVFHMIN-NEXT:    csrr a2, vlenb
8499; ZVFHMIN-NEXT:    slli a2, a2, 3
8500; ZVFHMIN-NEXT:    mv a3, a2
8501; ZVFHMIN-NEXT:    slli a2, a2, 1
8502; ZVFHMIN-NEXT:    add a2, a2, a3
8503; ZVFHMIN-NEXT:    add a2, sp, a2
8504; ZVFHMIN-NEXT:    addi a2, a2, 16
8505; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
8506; ZVFHMIN-NEXT:    vsetvli a2, zero, e8, m4, ta, ma
8507; ZVFHMIN-NEXT:    vmv8r.v v24, v8
8508; ZVFHMIN-NEXT:    vl8re16.v v8, (a0)
8509; ZVFHMIN-NEXT:    lui a2, 8
8510; ZVFHMIN-NEXT:    vmset.m v16
8511; ZVFHMIN-NEXT:    csrr a3, vlenb
8512; ZVFHMIN-NEXT:    slli a0, a3, 1
8513; ZVFHMIN-NEXT:    srli a3, a3, 2
8514; ZVFHMIN-NEXT:    sub a4, a1, a0
8515; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
8516; ZVFHMIN-NEXT:    vslidedown.vx v0, v16, a3
8517; ZVFHMIN-NEXT:    sltu a3, a1, a4
8518; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
8519; ZVFHMIN-NEXT:    vxor.vx v16, v8, a2
8520; ZVFHMIN-NEXT:    addi a3, a3, -1
8521; ZVFHMIN-NEXT:    and a3, a3, a4
8522; ZVFHMIN-NEXT:    vmv4r.v v8, v16
8523; ZVFHMIN-NEXT:    addi a2, sp, 16
8524; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8525; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
8526; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
8527; ZVFHMIN-NEXT:    csrr a2, vlenb
8528; ZVFHMIN-NEXT:    slli a2, a2, 3
8529; ZVFHMIN-NEXT:    add a2, sp, a2
8530; ZVFHMIN-NEXT:    addi a2, a2, 16
8531; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8532; ZVFHMIN-NEXT:    csrr a2, vlenb
8533; ZVFHMIN-NEXT:    slli a2, a2, 4
8534; ZVFHMIN-NEXT:    add a2, sp, a2
8535; ZVFHMIN-NEXT:    addi a2, a2, 16
8536; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
8537; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
8538; ZVFHMIN-NEXT:    csrr a2, vlenb
8539; ZVFHMIN-NEXT:    slli a2, a2, 3
8540; ZVFHMIN-NEXT:    mv a3, a2
8541; ZVFHMIN-NEXT:    slli a2, a2, 1
8542; ZVFHMIN-NEXT:    add a2, a2, a3
8543; ZVFHMIN-NEXT:    add a2, sp, a2
8544; ZVFHMIN-NEXT:    addi a2, a2, 16
8545; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
8546; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
8547; ZVFHMIN-NEXT:    csrr a2, vlenb
8548; ZVFHMIN-NEXT:    slli a2, a2, 3
8549; ZVFHMIN-NEXT:    add a2, sp, a2
8550; ZVFHMIN-NEXT:    addi a2, a2, 16
8551; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
8552; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8553; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
8554; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8555; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
8556; ZVFHMIN-NEXT:    bltu a1, a0, .LBB281_2
8557; ZVFHMIN-NEXT:  # %bb.1:
8558; ZVFHMIN-NEXT:    mv a1, a0
8559; ZVFHMIN-NEXT:  .LBB281_2:
8560; ZVFHMIN-NEXT:    addi a0, sp, 16
8561; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
8562; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
8563; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
8564; ZVFHMIN-NEXT:    csrr a0, vlenb
8565; ZVFHMIN-NEXT:    slli a0, a0, 3
8566; ZVFHMIN-NEXT:    add a0, sp, a0
8567; ZVFHMIN-NEXT:    addi a0, a0, 16
8568; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
8569; ZVFHMIN-NEXT:    csrr a0, vlenb
8570; ZVFHMIN-NEXT:    slli a0, a0, 4
8571; ZVFHMIN-NEXT:    add a0, sp, a0
8572; ZVFHMIN-NEXT:    addi a0, a0, 16
8573; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
8574; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
8575; ZVFHMIN-NEXT:    csrr a0, vlenb
8576; ZVFHMIN-NEXT:    slli a0, a0, 3
8577; ZVFHMIN-NEXT:    mv a1, a0
8578; ZVFHMIN-NEXT:    slli a0, a0, 1
8579; ZVFHMIN-NEXT:    add a0, a0, a1
8580; ZVFHMIN-NEXT:    add a0, sp, a0
8581; ZVFHMIN-NEXT:    addi a0, a0, 16
8582; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
8583; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v24
8584; ZVFHMIN-NEXT:    csrr a0, vlenb
8585; ZVFHMIN-NEXT:    slli a0, a0, 3
8586; ZVFHMIN-NEXT:    add a0, sp, a0
8587; ZVFHMIN-NEXT:    addi a0, a0, 16
8588; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
8589; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8590; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
8591; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8592; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
8593; ZVFHMIN-NEXT:    csrr a0, vlenb
8594; ZVFHMIN-NEXT:    slli a0, a0, 5
8595; ZVFHMIN-NEXT:    add sp, sp, a0
8596; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
8597; ZVFHMIN-NEXT:    addi sp, sp, 16
8598; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
8599; ZVFHMIN-NEXT:    ret
8600  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl)
8601  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
8602  ret <vscale x 32 x half> %v
8603}
8604
8605define <vscale x 32 x half> @vfmsub_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
8606; ZVFH-LABEL: vfmsub_vf_nxv32f16:
8607; ZVFH:       # %bb.0:
8608; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
8609; ZVFH-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
8610; ZVFH-NEXT:    ret
8611;
8612; ZVFHMIN-LABEL: vfmsub_vf_nxv32f16:
8613; ZVFHMIN:       # %bb.0:
8614; ZVFHMIN-NEXT:    addi sp, sp, -16
8615; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
8616; ZVFHMIN-NEXT:    csrr a1, vlenb
8617; ZVFHMIN-NEXT:    slli a1, a1, 3
8618; ZVFHMIN-NEXT:    mv a2, a1
8619; ZVFHMIN-NEXT:    slli a1, a1, 2
8620; ZVFHMIN-NEXT:    add a1, a1, a2
8621; ZVFHMIN-NEXT:    sub sp, sp, a1
8622; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
8623; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
8624; ZVFHMIN-NEXT:    vmv1r.v v7, v0
8625; ZVFHMIN-NEXT:    vmv8r.v v24, v8
8626; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
8627; ZVFHMIN-NEXT:    lui a1, 8
8628; ZVFHMIN-NEXT:    csrr a3, vlenb
8629; ZVFHMIN-NEXT:    vxor.vx v8, v16, a1, v0.t
8630; ZVFHMIN-NEXT:    slli a1, a3, 1
8631; ZVFHMIN-NEXT:    srli a3, a3, 2
8632; ZVFHMIN-NEXT:    sub a4, a0, a1
8633; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
8634; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
8635; ZVFHMIN-NEXT:    sltu a3, a0, a4
8636; ZVFHMIN-NEXT:    addi a3, a3, -1
8637; ZVFHMIN-NEXT:    and a3, a3, a4
8638; ZVFHMIN-NEXT:    csrr a4, vlenb
8639; ZVFHMIN-NEXT:    slli a4, a4, 4
8640; ZVFHMIN-NEXT:    add a4, sp, a4
8641; ZVFHMIN-NEXT:    addi a4, a4, 16
8642; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
8643; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
8644; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
8645; ZVFHMIN-NEXT:    csrr a4, vlenb
8646; ZVFHMIN-NEXT:    slli a4, a4, 3
8647; ZVFHMIN-NEXT:    add a4, sp, a4
8648; ZVFHMIN-NEXT:    addi a4, a4, 16
8649; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
8650; ZVFHMIN-NEXT:    csrr a4, vlenb
8651; ZVFHMIN-NEXT:    slli a4, a4, 3
8652; ZVFHMIN-NEXT:    mv a5, a4
8653; ZVFHMIN-NEXT:    slli a4, a4, 1
8654; ZVFHMIN-NEXT:    add a4, a4, a5
8655; ZVFHMIN-NEXT:    add a4, sp, a4
8656; ZVFHMIN-NEXT:    addi a4, a4, 16
8657; ZVFHMIN-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
8658; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
8659; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
8660; ZVFHMIN-NEXT:    vmv.v.x v24, a2
8661; ZVFHMIN-NEXT:    csrr a2, vlenb
8662; ZVFHMIN-NEXT:    slli a2, a2, 5
8663; ZVFHMIN-NEXT:    add a2, sp, a2
8664; ZVFHMIN-NEXT:    addi a2, a2, 16
8665; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
8666; ZVFHMIN-NEXT:    csrr a2, vlenb
8667; ZVFHMIN-NEXT:    slli a2, a2, 5
8668; ZVFHMIN-NEXT:    add a2, sp, a2
8669; ZVFHMIN-NEXT:    addi a2, a2, 16
8670; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
8671; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
8672; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
8673; ZVFHMIN-NEXT:    csrr a2, vlenb
8674; ZVFHMIN-NEXT:    slli a2, a2, 3
8675; ZVFHMIN-NEXT:    add a2, sp, a2
8676; ZVFHMIN-NEXT:    addi a2, a2, 16
8677; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
8678; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8679; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
8680; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8681; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
8682; ZVFHMIN-NEXT:    addi a2, sp, 16
8683; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8684; ZVFHMIN-NEXT:    bltu a0, a1, .LBB282_2
8685; ZVFHMIN-NEXT:  # %bb.1:
8686; ZVFHMIN-NEXT:    mv a0, a1
8687; ZVFHMIN-NEXT:  .LBB282_2:
8688; ZVFHMIN-NEXT:    vmv1r.v v0, v7
8689; ZVFHMIN-NEXT:    csrr a1, vlenb
8690; ZVFHMIN-NEXT:    slli a1, a1, 4
8691; ZVFHMIN-NEXT:    add a1, sp, a1
8692; ZVFHMIN-NEXT:    addi a1, a1, 16
8693; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
8694; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8695; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
8696; ZVFHMIN-NEXT:    csrr a0, vlenb
8697; ZVFHMIN-NEXT:    slli a0, a0, 3
8698; ZVFHMIN-NEXT:    add a0, sp, a0
8699; ZVFHMIN-NEXT:    addi a0, a0, 16
8700; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
8701; ZVFHMIN-NEXT:    csrr a0, vlenb
8702; ZVFHMIN-NEXT:    slli a0, a0, 3
8703; ZVFHMIN-NEXT:    mv a1, a0
8704; ZVFHMIN-NEXT:    slli a0, a0, 1
8705; ZVFHMIN-NEXT:    add a0, a0, a1
8706; ZVFHMIN-NEXT:    add a0, sp, a0
8707; ZVFHMIN-NEXT:    addi a0, a0, 16
8708; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
8709; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
8710; ZVFHMIN-NEXT:    csrr a0, vlenb
8711; ZVFHMIN-NEXT:    slli a0, a0, 4
8712; ZVFHMIN-NEXT:    add a0, sp, a0
8713; ZVFHMIN-NEXT:    addi a0, a0, 16
8714; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
8715; ZVFHMIN-NEXT:    csrr a0, vlenb
8716; ZVFHMIN-NEXT:    slli a0, a0, 5
8717; ZVFHMIN-NEXT:    add a0, sp, a0
8718; ZVFHMIN-NEXT:    addi a0, a0, 16
8719; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
8720; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
8721; ZVFHMIN-NEXT:    csrr a0, vlenb
8722; ZVFHMIN-NEXT:    slli a0, a0, 3
8723; ZVFHMIN-NEXT:    add a0, sp, a0
8724; ZVFHMIN-NEXT:    addi a0, a0, 16
8725; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
8726; ZVFHMIN-NEXT:    csrr a0, vlenb
8727; ZVFHMIN-NEXT:    slli a0, a0, 4
8728; ZVFHMIN-NEXT:    add a0, sp, a0
8729; ZVFHMIN-NEXT:    addi a0, a0, 16
8730; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
8731; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8732; ZVFHMIN-NEXT:    vfmadd.vv v8, v16, v24, v0.t
8733; ZVFHMIN-NEXT:    vmv.v.v v16, v8
8734; ZVFHMIN-NEXT:    addi a0, sp, 16
8735; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
8736; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8737; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
8738; ZVFHMIN-NEXT:    csrr a0, vlenb
8739; ZVFHMIN-NEXT:    slli a0, a0, 3
8740; ZVFHMIN-NEXT:    mv a1, a0
8741; ZVFHMIN-NEXT:    slli a0, a0, 2
8742; ZVFHMIN-NEXT:    add a0, a0, a1
8743; ZVFHMIN-NEXT:    add sp, sp, a0
8744; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
8745; ZVFHMIN-NEXT:    addi sp, sp, 16
8746; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
8747; ZVFHMIN-NEXT:    ret
8748  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
8749  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
8750  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
8751  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
8752  ret <vscale x 32 x half> %v
8753}
8754
8755define <vscale x 32 x half> @vfmsub_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
8756; ZVFH-LABEL: vfmsub_vf_nxv32f16_commute:
8757; ZVFH:       # %bb.0:
8758; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
8759; ZVFH-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
8760; ZVFH-NEXT:    ret
8761;
8762; ZVFHMIN-LABEL: vfmsub_vf_nxv32f16_commute:
8763; ZVFHMIN:       # %bb.0:
8764; ZVFHMIN-NEXT:    addi sp, sp, -16
8765; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
8766; ZVFHMIN-NEXT:    csrr a1, vlenb
8767; ZVFHMIN-NEXT:    slli a1, a1, 3
8768; ZVFHMIN-NEXT:    mv a2, a1
8769; ZVFHMIN-NEXT:    slli a1, a1, 2
8770; ZVFHMIN-NEXT:    add a1, a1, a2
8771; ZVFHMIN-NEXT:    sub sp, sp, a1
8772; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
8773; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
8774; ZVFHMIN-NEXT:    vmv1r.v v7, v0
8775; ZVFHMIN-NEXT:    csrr a1, vlenb
8776; ZVFHMIN-NEXT:    slli a1, a1, 5
8777; ZVFHMIN-NEXT:    add a1, sp, a1
8778; ZVFHMIN-NEXT:    addi a1, a1, 16
8779; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
8780; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
8781; ZVFHMIN-NEXT:    lui a2, 8
8782; ZVFHMIN-NEXT:    csrr a3, vlenb
8783; ZVFHMIN-NEXT:    vmv.v.x v8, a1
8784; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
8785; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2, v0.t
8786; ZVFHMIN-NEXT:    slli a1, a3, 1
8787; ZVFHMIN-NEXT:    srli a3, a3, 2
8788; ZVFHMIN-NEXT:    sub a2, a0, a1
8789; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
8790; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
8791; ZVFHMIN-NEXT:    sltu a3, a0, a2
8792; ZVFHMIN-NEXT:    addi a3, a3, -1
8793; ZVFHMIN-NEXT:    and a2, a3, a2
8794; ZVFHMIN-NEXT:    csrr a3, vlenb
8795; ZVFHMIN-NEXT:    slli a3, a3, 4
8796; ZVFHMIN-NEXT:    add a3, sp, a3
8797; ZVFHMIN-NEXT:    addi a3, a3, 16
8798; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
8799; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
8800; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
8801; ZVFHMIN-NEXT:    csrr a2, vlenb
8802; ZVFHMIN-NEXT:    slli a2, a2, 3
8803; ZVFHMIN-NEXT:    add a2, sp, a2
8804; ZVFHMIN-NEXT:    addi a2, a2, 16
8805; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
8806; ZVFHMIN-NEXT:    csrr a2, vlenb
8807; ZVFHMIN-NEXT:    slli a2, a2, 3
8808; ZVFHMIN-NEXT:    mv a3, a2
8809; ZVFHMIN-NEXT:    slli a2, a2, 1
8810; ZVFHMIN-NEXT:    add a2, a2, a3
8811; ZVFHMIN-NEXT:    add a2, sp, a2
8812; ZVFHMIN-NEXT:    addi a2, a2, 16
8813; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8814; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
8815; ZVFHMIN-NEXT:    csrr a2, vlenb
8816; ZVFHMIN-NEXT:    slli a2, a2, 5
8817; ZVFHMIN-NEXT:    add a2, sp, a2
8818; ZVFHMIN-NEXT:    addi a2, a2, 16
8819; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
8820; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
8821; ZVFHMIN-NEXT:    csrr a2, vlenb
8822; ZVFHMIN-NEXT:    slli a2, a2, 3
8823; ZVFHMIN-NEXT:    add a2, sp, a2
8824; ZVFHMIN-NEXT:    addi a2, a2, 16
8825; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
8826; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8827; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
8828; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8829; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
8830; ZVFHMIN-NEXT:    addi a2, sp, 16
8831; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
8832; ZVFHMIN-NEXT:    bltu a0, a1, .LBB283_2
8833; ZVFHMIN-NEXT:  # %bb.1:
8834; ZVFHMIN-NEXT:    mv a0, a1
8835; ZVFHMIN-NEXT:  .LBB283_2:
8836; ZVFHMIN-NEXT:    vmv1r.v v0, v7
8837; ZVFHMIN-NEXT:    csrr a1, vlenb
8838; ZVFHMIN-NEXT:    slli a1, a1, 4
8839; ZVFHMIN-NEXT:    add a1, sp, a1
8840; ZVFHMIN-NEXT:    addi a1, a1, 16
8841; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
8842; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8843; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
8844; ZVFHMIN-NEXT:    csrr a0, vlenb
8845; ZVFHMIN-NEXT:    slli a0, a0, 3
8846; ZVFHMIN-NEXT:    add a0, sp, a0
8847; ZVFHMIN-NEXT:    addi a0, a0, 16
8848; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
8849; ZVFHMIN-NEXT:    csrr a0, vlenb
8850; ZVFHMIN-NEXT:    slli a0, a0, 5
8851; ZVFHMIN-NEXT:    add a0, sp, a0
8852; ZVFHMIN-NEXT:    addi a0, a0, 16
8853; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
8854; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
8855; ZVFHMIN-NEXT:    csrr a0, vlenb
8856; ZVFHMIN-NEXT:    slli a0, a0, 3
8857; ZVFHMIN-NEXT:    mv a1, a0
8858; ZVFHMIN-NEXT:    slli a0, a0, 1
8859; ZVFHMIN-NEXT:    add a0, a0, a1
8860; ZVFHMIN-NEXT:    add a0, sp, a0
8861; ZVFHMIN-NEXT:    addi a0, a0, 16
8862; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
8863; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
8864; ZVFHMIN-NEXT:    csrr a0, vlenb
8865; ZVFHMIN-NEXT:    slli a0, a0, 5
8866; ZVFHMIN-NEXT:    add a0, sp, a0
8867; ZVFHMIN-NEXT:    addi a0, a0, 16
8868; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
8869; ZVFHMIN-NEXT:    csrr a0, vlenb
8870; ZVFHMIN-NEXT:    slli a0, a0, 3
8871; ZVFHMIN-NEXT:    add a0, sp, a0
8872; ZVFHMIN-NEXT:    addi a0, a0, 16
8873; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
8874; ZVFHMIN-NEXT:    csrr a0, vlenb
8875; ZVFHMIN-NEXT:    slli a0, a0, 5
8876; ZVFHMIN-NEXT:    add a0, sp, a0
8877; ZVFHMIN-NEXT:    addi a0, a0, 16
8878; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
8879; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8880; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
8881; ZVFHMIN-NEXT:    addi a0, sp, 16
8882; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
8883; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8884; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
8885; ZVFHMIN-NEXT:    csrr a0, vlenb
8886; ZVFHMIN-NEXT:    slli a0, a0, 3
8887; ZVFHMIN-NEXT:    mv a1, a0
8888; ZVFHMIN-NEXT:    slli a0, a0, 2
8889; ZVFHMIN-NEXT:    add a0, a0, a1
8890; ZVFHMIN-NEXT:    add sp, sp, a0
8891; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
8892; ZVFHMIN-NEXT:    addi sp, sp, 16
8893; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
8894; ZVFHMIN-NEXT:    ret
8895  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
8896  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
8897  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
8898  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
8899  ret <vscale x 32 x half> %v
8900}
8901
8902define <vscale x 32 x half> @vfmsub_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
8903; ZVFH-LABEL: vfmsub_vf_nxv32f16_unmasked:
8904; ZVFH:       # %bb.0:
8905; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
8906; ZVFH-NEXT:    vfmsub.vf v8, fa0, v16
8907; ZVFH-NEXT:    ret
8908;
8909; ZVFHMIN-LABEL: vfmsub_vf_nxv32f16_unmasked:
8910; ZVFHMIN:       # %bb.0:
8911; ZVFHMIN-NEXT:    addi sp, sp, -16
8912; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
8913; ZVFHMIN-NEXT:    csrr a1, vlenb
8914; ZVFHMIN-NEXT:    slli a1, a1, 5
8915; ZVFHMIN-NEXT:    sub sp, sp, a1
8916; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
8917; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
8918; ZVFHMIN-NEXT:    lui a1, 8
8919; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
8920; ZVFHMIN-NEXT:    vmset.m v24
8921; ZVFHMIN-NEXT:    csrr a3, vlenb
8922; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
8923; ZVFHMIN-NEXT:    vxor.vx v16, v16, a1
8924; ZVFHMIN-NEXT:    slli a1, a3, 1
8925; ZVFHMIN-NEXT:    srli a3, a3, 2
8926; ZVFHMIN-NEXT:    sub a4, a0, a1
8927; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
8928; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
8929; ZVFHMIN-NEXT:    sltu a3, a0, a4
8930; ZVFHMIN-NEXT:    addi a3, a3, -1
8931; ZVFHMIN-NEXT:    and a3, a3, a4
8932; ZVFHMIN-NEXT:    csrr a4, vlenb
8933; ZVFHMIN-NEXT:    slli a4, a4, 3
8934; ZVFHMIN-NEXT:    add a4, sp, a4
8935; ZVFHMIN-NEXT:    addi a4, a4, 16
8936; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
8937; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
8938; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
8939; ZVFHMIN-NEXT:    addi a4, sp, 16
8940; ZVFHMIN-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
8941; ZVFHMIN-NEXT:    csrr a4, vlenb
8942; ZVFHMIN-NEXT:    slli a4, a4, 4
8943; ZVFHMIN-NEXT:    add a4, sp, a4
8944; ZVFHMIN-NEXT:    addi a4, a4, 16
8945; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
8946; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
8947; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
8948; ZVFHMIN-NEXT:    vmv.v.x v8, a2
8949; ZVFHMIN-NEXT:    csrr a2, vlenb
8950; ZVFHMIN-NEXT:    slli a2, a2, 3
8951; ZVFHMIN-NEXT:    mv a4, a2
8952; ZVFHMIN-NEXT:    slli a2, a2, 1
8953; ZVFHMIN-NEXT:    add a2, a2, a4
8954; ZVFHMIN-NEXT:    add a2, sp, a2
8955; ZVFHMIN-NEXT:    addi a2, a2, 16
8956; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
8957; ZVFHMIN-NEXT:    csrr a2, vlenb
8958; ZVFHMIN-NEXT:    slli a2, a2, 3
8959; ZVFHMIN-NEXT:    mv a4, a2
8960; ZVFHMIN-NEXT:    slli a2, a2, 1
8961; ZVFHMIN-NEXT:    add a2, a2, a4
8962; ZVFHMIN-NEXT:    add a2, sp, a2
8963; ZVFHMIN-NEXT:    addi a2, a2, 16
8964; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
8965; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
8966; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
8967; ZVFHMIN-NEXT:    addi a2, sp, 16
8968; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
8969; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
8970; ZVFHMIN-NEXT:    vfmadd.vv v8, v16, v24, v0.t
8971; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
8972; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
8973; ZVFHMIN-NEXT:    bltu a0, a1, .LBB284_2
8974; ZVFHMIN-NEXT:  # %bb.1:
8975; ZVFHMIN-NEXT:    mv a0, a1
8976; ZVFHMIN-NEXT:  .LBB284_2:
8977; ZVFHMIN-NEXT:    csrr a1, vlenb
8978; ZVFHMIN-NEXT:    slli a1, a1, 3
8979; ZVFHMIN-NEXT:    add a1, sp, a1
8980; ZVFHMIN-NEXT:    addi a1, a1, 16
8981; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
8982; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
8983; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24
8984; ZVFHMIN-NEXT:    addi a0, sp, 16
8985; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
8986; ZVFHMIN-NEXT:    csrr a0, vlenb
8987; ZVFHMIN-NEXT:    slli a0, a0, 4
8988; ZVFHMIN-NEXT:    add a0, sp, a0
8989; ZVFHMIN-NEXT:    addi a0, a0, 16
8990; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
8991; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
8992; ZVFHMIN-NEXT:    csrr a0, vlenb
8993; ZVFHMIN-NEXT:    slli a0, a0, 3
8994; ZVFHMIN-NEXT:    mv a1, a0
8995; ZVFHMIN-NEXT:    slli a0, a0, 1
8996; ZVFHMIN-NEXT:    add a0, a0, a1
8997; ZVFHMIN-NEXT:    add a0, sp, a0
8998; ZVFHMIN-NEXT:    addi a0, a0, 16
8999; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9000; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
9001; ZVFHMIN-NEXT:    addi a0, sp, 16
9002; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9003; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9004; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v8
9005; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9006; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v0
9007; ZVFHMIN-NEXT:    vmv8r.v v8, v16
9008; ZVFHMIN-NEXT:    csrr a0, vlenb
9009; ZVFHMIN-NEXT:    slli a0, a0, 5
9010; ZVFHMIN-NEXT:    add sp, sp, a0
9011; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
9012; ZVFHMIN-NEXT:    addi sp, sp, 16
9013; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
9014; ZVFHMIN-NEXT:    ret
9015  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
9016  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
9017  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9018  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9019  ret <vscale x 32 x half> %v
9020}
9021
9022define <vscale x 32 x half> @vfmsub_vf_nxv32f16_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
9023; ZVFH-LABEL: vfmsub_vf_nxv32f16_unmasked_commute:
9024; ZVFH:       # %bb.0:
9025; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
9026; ZVFH-NEXT:    vfmsub.vf v8, fa0, v16
9027; ZVFH-NEXT:    ret
9028;
9029; ZVFHMIN-LABEL: vfmsub_vf_nxv32f16_unmasked_commute:
9030; ZVFHMIN:       # %bb.0:
9031; ZVFHMIN-NEXT:    addi sp, sp, -16
9032; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
9033; ZVFHMIN-NEXT:    csrr a1, vlenb
9034; ZVFHMIN-NEXT:    slli a1, a1, 5
9035; ZVFHMIN-NEXT:    sub sp, sp, a1
9036; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
9037; ZVFHMIN-NEXT:    csrr a1, vlenb
9038; ZVFHMIN-NEXT:    slli a1, a1, 3
9039; ZVFHMIN-NEXT:    mv a2, a1
9040; ZVFHMIN-NEXT:    slli a1, a1, 1
9041; ZVFHMIN-NEXT:    add a1, a1, a2
9042; ZVFHMIN-NEXT:    add a1, sp, a1
9043; ZVFHMIN-NEXT:    addi a1, a1, 16
9044; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
9045; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
9046; ZVFHMIN-NEXT:    lui a2, 8
9047; ZVFHMIN-NEXT:    vsetvli a3, zero, e16, m8, ta, ma
9048; ZVFHMIN-NEXT:    vmset.m v24
9049; ZVFHMIN-NEXT:    csrr a3, vlenb
9050; ZVFHMIN-NEXT:    vmv.v.x v8, a1
9051; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
9052; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2
9053; ZVFHMIN-NEXT:    slli a1, a3, 1
9054; ZVFHMIN-NEXT:    srli a3, a3, 2
9055; ZVFHMIN-NEXT:    sub a2, a0, a1
9056; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
9057; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
9058; ZVFHMIN-NEXT:    sltu a3, a0, a2
9059; ZVFHMIN-NEXT:    addi a3, a3, -1
9060; ZVFHMIN-NEXT:    and a2, a3, a2
9061; ZVFHMIN-NEXT:    csrr a3, vlenb
9062; ZVFHMIN-NEXT:    slli a3, a3, 3
9063; ZVFHMIN-NEXT:    add a3, sp, a3
9064; ZVFHMIN-NEXT:    addi a3, a3, 16
9065; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
9066; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
9067; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
9068; ZVFHMIN-NEXT:    addi a2, sp, 16
9069; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9070; ZVFHMIN-NEXT:    csrr a2, vlenb
9071; ZVFHMIN-NEXT:    slli a2, a2, 4
9072; ZVFHMIN-NEXT:    add a2, sp, a2
9073; ZVFHMIN-NEXT:    addi a2, a2, 16
9074; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9075; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
9076; ZVFHMIN-NEXT:    csrr a2, vlenb
9077; ZVFHMIN-NEXT:    slli a2, a2, 3
9078; ZVFHMIN-NEXT:    mv a3, a2
9079; ZVFHMIN-NEXT:    slli a2, a2, 1
9080; ZVFHMIN-NEXT:    add a2, a2, a3
9081; ZVFHMIN-NEXT:    add a2, sp, a2
9082; ZVFHMIN-NEXT:    addi a2, a2, 16
9083; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
9084; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
9085; ZVFHMIN-NEXT:    addi a2, sp, 16
9086; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
9087; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9088; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
9089; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9090; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
9091; ZVFHMIN-NEXT:    bltu a0, a1, .LBB285_2
9092; ZVFHMIN-NEXT:  # %bb.1:
9093; ZVFHMIN-NEXT:    mv a0, a1
9094; ZVFHMIN-NEXT:  .LBB285_2:
9095; ZVFHMIN-NEXT:    csrr a1, vlenb
9096; ZVFHMIN-NEXT:    slli a1, a1, 3
9097; ZVFHMIN-NEXT:    add a1, sp, a1
9098; ZVFHMIN-NEXT:    addi a1, a1, 16
9099; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
9100; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
9101; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
9102; ZVFHMIN-NEXT:    addi a0, sp, 16
9103; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
9104; ZVFHMIN-NEXT:    csrr a0, vlenb
9105; ZVFHMIN-NEXT:    slli a0, a0, 3
9106; ZVFHMIN-NEXT:    mv a1, a0
9107; ZVFHMIN-NEXT:    slli a0, a0, 1
9108; ZVFHMIN-NEXT:    add a0, a0, a1
9109; ZVFHMIN-NEXT:    add a0, sp, a0
9110; ZVFHMIN-NEXT:    addi a0, a0, 16
9111; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
9112; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
9113; ZVFHMIN-NEXT:    csrr a0, vlenb
9114; ZVFHMIN-NEXT:    slli a0, a0, 4
9115; ZVFHMIN-NEXT:    add a0, sp, a0
9116; ZVFHMIN-NEXT:    addi a0, a0, 16
9117; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9118; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
9119; ZVFHMIN-NEXT:    addi a0, sp, 16
9120; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9121; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9122; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v8
9123; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9124; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v0
9125; ZVFHMIN-NEXT:    vmv8r.v v8, v16
9126; ZVFHMIN-NEXT:    csrr a0, vlenb
9127; ZVFHMIN-NEXT:    slli a0, a0, 5
9128; ZVFHMIN-NEXT:    add sp, sp, a0
9129; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
9130; ZVFHMIN-NEXT:    addi sp, sp, 16
9131; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
9132; ZVFHMIN-NEXT:    ret
9133  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
9134  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
9135  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9136  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9137  ret <vscale x 32 x half> %v
9138}
9139
9140define <vscale x 32 x half> @vfnmadd_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
9141; ZVFH-LABEL: vfnmadd_vv_nxv32f16:
9142; ZVFH:       # %bb.0:
9143; ZVFH-NEXT:    vl8re16.v v24, (a0)
9144; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9145; ZVFH-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
9146; ZVFH-NEXT:    vmv.v.v v8, v16
9147; ZVFH-NEXT:    ret
9148;
9149; ZVFHMIN-LABEL: vfnmadd_vv_nxv32f16:
9150; ZVFHMIN:       # %bb.0:
9151; ZVFHMIN-NEXT:    addi sp, sp, -16
9152; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
9153; ZVFHMIN-NEXT:    csrr a2, vlenb
9154; ZVFHMIN-NEXT:    slli a2, a2, 4
9155; ZVFHMIN-NEXT:    mv a3, a2
9156; ZVFHMIN-NEXT:    slli a2, a2, 1
9157; ZVFHMIN-NEXT:    add a2, a2, a3
9158; ZVFHMIN-NEXT:    sub sp, sp, a2
9159; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x30, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 48 * vlenb
9160; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9161; ZVFHMIN-NEXT:    vmv1r.v v7, v0
9162; ZVFHMIN-NEXT:    csrr a2, vlenb
9163; ZVFHMIN-NEXT:    slli a2, a2, 3
9164; ZVFHMIN-NEXT:    mv a3, a2
9165; ZVFHMIN-NEXT:    slli a2, a2, 2
9166; ZVFHMIN-NEXT:    add a2, a2, a3
9167; ZVFHMIN-NEXT:    add a2, sp, a2
9168; ZVFHMIN-NEXT:    addi a2, a2, 16
9169; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9170; ZVFHMIN-NEXT:    vl8re16.v v24, (a0)
9171; ZVFHMIN-NEXT:    lui a2, 8
9172; ZVFHMIN-NEXT:    csrr a3, vlenb
9173; ZVFHMIN-NEXT:    vxor.vx v8, v16, a2, v0.t
9174; ZVFHMIN-NEXT:    csrr a0, vlenb
9175; ZVFHMIN-NEXT:    slli a0, a0, 5
9176; ZVFHMIN-NEXT:    add a0, sp, a0
9177; ZVFHMIN-NEXT:    addi a0, a0, 16
9178; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
9179; ZVFHMIN-NEXT:    slli a0, a3, 1
9180; ZVFHMIN-NEXT:    srli a3, a3, 2
9181; ZVFHMIN-NEXT:    sub a4, a1, a0
9182; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
9183; ZVFHMIN-NEXT:    vslidedown.vx v6, v0, a3
9184; ZVFHMIN-NEXT:    sltu a3, a1, a4
9185; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9186; ZVFHMIN-NEXT:    vxor.vx v24, v24, a2, v0.t
9187; ZVFHMIN-NEXT:    addi a3, a3, -1
9188; ZVFHMIN-NEXT:    and a3, a3, a4
9189; ZVFHMIN-NEXT:    vmv1r.v v0, v6
9190; ZVFHMIN-NEXT:    csrr a2, vlenb
9191; ZVFHMIN-NEXT:    slli a2, a2, 3
9192; ZVFHMIN-NEXT:    mv a4, a2
9193; ZVFHMIN-NEXT:    slli a2, a2, 1
9194; ZVFHMIN-NEXT:    add a2, a2, a4
9195; ZVFHMIN-NEXT:    add a2, sp, a2
9196; ZVFHMIN-NEXT:    addi a2, a2, 16
9197; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9198; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
9199; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
9200; ZVFHMIN-NEXT:    csrr a2, vlenb
9201; ZVFHMIN-NEXT:    slli a2, a2, 4
9202; ZVFHMIN-NEXT:    add a2, sp, a2
9203; ZVFHMIN-NEXT:    addi a2, a2, 16
9204; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9205; ZVFHMIN-NEXT:    csrr a2, vlenb
9206; ZVFHMIN-NEXT:    slli a2, a2, 5
9207; ZVFHMIN-NEXT:    add a2, sp, a2
9208; ZVFHMIN-NEXT:    addi a2, a2, 16
9209; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9210; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
9211; ZVFHMIN-NEXT:    addi a2, sp, 16
9212; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9213; ZVFHMIN-NEXT:    csrr a2, vlenb
9214; ZVFHMIN-NEXT:    slli a2, a2, 3
9215; ZVFHMIN-NEXT:    mv a3, a2
9216; ZVFHMIN-NEXT:    slli a2, a2, 2
9217; ZVFHMIN-NEXT:    add a2, a2, a3
9218; ZVFHMIN-NEXT:    add a2, sp, a2
9219; ZVFHMIN-NEXT:    addi a2, a2, 16
9220; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9221; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
9222; ZVFHMIN-NEXT:    csrr a2, vlenb
9223; ZVFHMIN-NEXT:    slli a2, a2, 3
9224; ZVFHMIN-NEXT:    add a2, sp, a2
9225; ZVFHMIN-NEXT:    addi a2, a2, 16
9226; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9227; ZVFHMIN-NEXT:    csrr a2, vlenb
9228; ZVFHMIN-NEXT:    slli a2, a2, 4
9229; ZVFHMIN-NEXT:    add a2, sp, a2
9230; ZVFHMIN-NEXT:    addi a2, a2, 16
9231; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9232; ZVFHMIN-NEXT:    csrr a2, vlenb
9233; ZVFHMIN-NEXT:    slli a2, a2, 3
9234; ZVFHMIN-NEXT:    add a2, sp, a2
9235; ZVFHMIN-NEXT:    addi a2, a2, 16
9236; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
9237; ZVFHMIN-NEXT:    addi a2, sp, 16
9238; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
9239; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9240; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
9241; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9242; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
9243; ZVFHMIN-NEXT:    csrr a2, vlenb
9244; ZVFHMIN-NEXT:    slli a2, a2, 4
9245; ZVFHMIN-NEXT:    add a2, sp, a2
9246; ZVFHMIN-NEXT:    addi a2, a2, 16
9247; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9248; ZVFHMIN-NEXT:    bltu a1, a0, .LBB286_2
9249; ZVFHMIN-NEXT:  # %bb.1:
9250; ZVFHMIN-NEXT:    mv a1, a0
9251; ZVFHMIN-NEXT:  .LBB286_2:
9252; ZVFHMIN-NEXT:    vmv1r.v v0, v7
9253; ZVFHMIN-NEXT:    csrr a0, vlenb
9254; ZVFHMIN-NEXT:    slli a0, a0, 5
9255; ZVFHMIN-NEXT:    add a0, sp, a0
9256; ZVFHMIN-NEXT:    addi a0, a0, 16
9257; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9258; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
9259; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
9260; ZVFHMIN-NEXT:    csrr a0, vlenb
9261; ZVFHMIN-NEXT:    slli a0, a0, 3
9262; ZVFHMIN-NEXT:    add a0, sp, a0
9263; ZVFHMIN-NEXT:    addi a0, a0, 16
9264; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
9265; ZVFHMIN-NEXT:    csrr a0, vlenb
9266; ZVFHMIN-NEXT:    slli a0, a0, 3
9267; ZVFHMIN-NEXT:    mv a1, a0
9268; ZVFHMIN-NEXT:    slli a0, a0, 1
9269; ZVFHMIN-NEXT:    add a0, a0, a1
9270; ZVFHMIN-NEXT:    add a0, sp, a0
9271; ZVFHMIN-NEXT:    addi a0, a0, 16
9272; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9273; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
9274; ZVFHMIN-NEXT:    csrr a0, vlenb
9275; ZVFHMIN-NEXT:    slli a0, a0, 5
9276; ZVFHMIN-NEXT:    add a0, sp, a0
9277; ZVFHMIN-NEXT:    addi a0, a0, 16
9278; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
9279; ZVFHMIN-NEXT:    csrr a0, vlenb
9280; ZVFHMIN-NEXT:    slli a0, a0, 3
9281; ZVFHMIN-NEXT:    mv a1, a0
9282; ZVFHMIN-NEXT:    slli a0, a0, 2
9283; ZVFHMIN-NEXT:    add a0, a0, a1
9284; ZVFHMIN-NEXT:    add a0, sp, a0
9285; ZVFHMIN-NEXT:    addi a0, a0, 16
9286; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9287; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
9288; ZVFHMIN-NEXT:    csrr a0, vlenb
9289; ZVFHMIN-NEXT:    slli a0, a0, 5
9290; ZVFHMIN-NEXT:    add a0, sp, a0
9291; ZVFHMIN-NEXT:    addi a0, a0, 16
9292; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9293; ZVFHMIN-NEXT:    csrr a0, vlenb
9294; ZVFHMIN-NEXT:    slli a0, a0, 3
9295; ZVFHMIN-NEXT:    add a0, sp, a0
9296; ZVFHMIN-NEXT:    addi a0, a0, 16
9297; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9298; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9299; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
9300; ZVFHMIN-NEXT:    csrr a0, vlenb
9301; ZVFHMIN-NEXT:    slli a0, a0, 4
9302; ZVFHMIN-NEXT:    add a0, sp, a0
9303; ZVFHMIN-NEXT:    addi a0, a0, 16
9304; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9305; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9306; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
9307; ZVFHMIN-NEXT:    csrr a0, vlenb
9308; ZVFHMIN-NEXT:    slli a0, a0, 4
9309; ZVFHMIN-NEXT:    mv a1, a0
9310; ZVFHMIN-NEXT:    slli a0, a0, 1
9311; ZVFHMIN-NEXT:    add a0, a0, a1
9312; ZVFHMIN-NEXT:    add sp, sp, a0
9313; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
9314; ZVFHMIN-NEXT:    addi sp, sp, 16
9315; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
9316; ZVFHMIN-NEXT:    ret
9317  %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl)
9318  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl)
9319  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
9320  ret <vscale x 32 x half> %v
9321}
9322
9323define <vscale x 32 x half> @vfnmadd_vv_nxv32f16_commuted(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
9324; ZVFH-LABEL: vfnmadd_vv_nxv32f16_commuted:
9325; ZVFH:       # %bb.0:
9326; ZVFH-NEXT:    vl8re16.v v24, (a0)
9327; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9328; ZVFH-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
9329; ZVFH-NEXT:    ret
9330;
9331; ZVFHMIN-LABEL: vfnmadd_vv_nxv32f16_commuted:
9332; ZVFHMIN:       # %bb.0:
9333; ZVFHMIN-NEXT:    addi sp, sp, -16
9334; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
9335; ZVFHMIN-NEXT:    csrr a2, vlenb
9336; ZVFHMIN-NEXT:    slli a2, a2, 4
9337; ZVFHMIN-NEXT:    mv a3, a2
9338; ZVFHMIN-NEXT:    slli a2, a2, 1
9339; ZVFHMIN-NEXT:    add a2, a2, a3
9340; ZVFHMIN-NEXT:    sub sp, sp, a2
9341; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x30, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 48 * vlenb
9342; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9343; ZVFHMIN-NEXT:    vmv1r.v v7, v0
9344; ZVFHMIN-NEXT:    csrr a2, vlenb
9345; ZVFHMIN-NEXT:    slli a2, a2, 3
9346; ZVFHMIN-NEXT:    mv a3, a2
9347; ZVFHMIN-NEXT:    slli a2, a2, 2
9348; ZVFHMIN-NEXT:    add a2, a2, a3
9349; ZVFHMIN-NEXT:    add a2, sp, a2
9350; ZVFHMIN-NEXT:    addi a2, a2, 16
9351; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9352; ZVFHMIN-NEXT:    vl8re16.v v24, (a0)
9353; ZVFHMIN-NEXT:    lui a2, 8
9354; ZVFHMIN-NEXT:    csrr a3, vlenb
9355; ZVFHMIN-NEXT:    vxor.vx v8, v16, a2, v0.t
9356; ZVFHMIN-NEXT:    csrr a0, vlenb
9357; ZVFHMIN-NEXT:    slli a0, a0, 5
9358; ZVFHMIN-NEXT:    add a0, sp, a0
9359; ZVFHMIN-NEXT:    addi a0, a0, 16
9360; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
9361; ZVFHMIN-NEXT:    slli a0, a3, 1
9362; ZVFHMIN-NEXT:    srli a3, a3, 2
9363; ZVFHMIN-NEXT:    sub a4, a1, a0
9364; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
9365; ZVFHMIN-NEXT:    vslidedown.vx v6, v0, a3
9366; ZVFHMIN-NEXT:    sltu a3, a1, a4
9367; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9368; ZVFHMIN-NEXT:    vxor.vx v24, v24, a2, v0.t
9369; ZVFHMIN-NEXT:    addi a3, a3, -1
9370; ZVFHMIN-NEXT:    and a3, a3, a4
9371; ZVFHMIN-NEXT:    vmv1r.v v0, v6
9372; ZVFHMIN-NEXT:    csrr a2, vlenb
9373; ZVFHMIN-NEXT:    slli a2, a2, 3
9374; ZVFHMIN-NEXT:    mv a4, a2
9375; ZVFHMIN-NEXT:    slli a2, a2, 1
9376; ZVFHMIN-NEXT:    add a2, a2, a4
9377; ZVFHMIN-NEXT:    add a2, sp, a2
9378; ZVFHMIN-NEXT:    addi a2, a2, 16
9379; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9380; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
9381; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
9382; ZVFHMIN-NEXT:    csrr a2, vlenb
9383; ZVFHMIN-NEXT:    slli a2, a2, 4
9384; ZVFHMIN-NEXT:    add a2, sp, a2
9385; ZVFHMIN-NEXT:    addi a2, a2, 16
9386; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9387; ZVFHMIN-NEXT:    csrr a2, vlenb
9388; ZVFHMIN-NEXT:    slli a2, a2, 5
9389; ZVFHMIN-NEXT:    add a2, sp, a2
9390; ZVFHMIN-NEXT:    addi a2, a2, 16
9391; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9392; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
9393; ZVFHMIN-NEXT:    csrr a2, vlenb
9394; ZVFHMIN-NEXT:    slli a2, a2, 3
9395; ZVFHMIN-NEXT:    add a2, sp, a2
9396; ZVFHMIN-NEXT:    addi a2, a2, 16
9397; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9398; ZVFHMIN-NEXT:    csrr a2, vlenb
9399; ZVFHMIN-NEXT:    slli a2, a2, 3
9400; ZVFHMIN-NEXT:    mv a3, a2
9401; ZVFHMIN-NEXT:    slli a2, a2, 2
9402; ZVFHMIN-NEXT:    add a2, a2, a3
9403; ZVFHMIN-NEXT:    add a2, sp, a2
9404; ZVFHMIN-NEXT:    addi a2, a2, 16
9405; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9406; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
9407; ZVFHMIN-NEXT:    addi a2, sp, 16
9408; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
9409; ZVFHMIN-NEXT:    csrr a2, vlenb
9410; ZVFHMIN-NEXT:    slli a2, a2, 4
9411; ZVFHMIN-NEXT:    add a2, sp, a2
9412; ZVFHMIN-NEXT:    addi a2, a2, 16
9413; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9414; ZVFHMIN-NEXT:    csrr a2, vlenb
9415; ZVFHMIN-NEXT:    slli a2, a2, 3
9416; ZVFHMIN-NEXT:    add a2, sp, a2
9417; ZVFHMIN-NEXT:    addi a2, a2, 16
9418; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
9419; ZVFHMIN-NEXT:    addi a2, sp, 16
9420; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
9421; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9422; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
9423; ZVFHMIN-NEXT:    vmv.v.v v8, v16
9424; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9425; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
9426; ZVFHMIN-NEXT:    csrr a2, vlenb
9427; ZVFHMIN-NEXT:    slli a2, a2, 3
9428; ZVFHMIN-NEXT:    add a2, sp, a2
9429; ZVFHMIN-NEXT:    addi a2, a2, 16
9430; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
9431; ZVFHMIN-NEXT:    bltu a1, a0, .LBB287_2
9432; ZVFHMIN-NEXT:  # %bb.1:
9433; ZVFHMIN-NEXT:    mv a1, a0
9434; ZVFHMIN-NEXT:  .LBB287_2:
9435; ZVFHMIN-NEXT:    vmv1r.v v0, v7
9436; ZVFHMIN-NEXT:    csrr a0, vlenb
9437; ZVFHMIN-NEXT:    slli a0, a0, 5
9438; ZVFHMIN-NEXT:    add a0, sp, a0
9439; ZVFHMIN-NEXT:    addi a0, a0, 16
9440; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9441; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
9442; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
9443; ZVFHMIN-NEXT:    csrr a0, vlenb
9444; ZVFHMIN-NEXT:    slli a0, a0, 4
9445; ZVFHMIN-NEXT:    add a0, sp, a0
9446; ZVFHMIN-NEXT:    addi a0, a0, 16
9447; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
9448; ZVFHMIN-NEXT:    csrr a0, vlenb
9449; ZVFHMIN-NEXT:    slli a0, a0, 3
9450; ZVFHMIN-NEXT:    mv a1, a0
9451; ZVFHMIN-NEXT:    slli a0, a0, 1
9452; ZVFHMIN-NEXT:    add a0, a0, a1
9453; ZVFHMIN-NEXT:    add a0, sp, a0
9454; ZVFHMIN-NEXT:    addi a0, a0, 16
9455; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9456; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
9457; ZVFHMIN-NEXT:    csrr a0, vlenb
9458; ZVFHMIN-NEXT:    slli a0, a0, 5
9459; ZVFHMIN-NEXT:    add a0, sp, a0
9460; ZVFHMIN-NEXT:    addi a0, a0, 16
9461; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
9462; ZVFHMIN-NEXT:    csrr a0, vlenb
9463; ZVFHMIN-NEXT:    slli a0, a0, 3
9464; ZVFHMIN-NEXT:    mv a1, a0
9465; ZVFHMIN-NEXT:    slli a0, a0, 2
9466; ZVFHMIN-NEXT:    add a0, a0, a1
9467; ZVFHMIN-NEXT:    add a0, sp, a0
9468; ZVFHMIN-NEXT:    addi a0, a0, 16
9469; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9470; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
9471; ZVFHMIN-NEXT:    csrr a0, vlenb
9472; ZVFHMIN-NEXT:    slli a0, a0, 4
9473; ZVFHMIN-NEXT:    add a0, sp, a0
9474; ZVFHMIN-NEXT:    addi a0, a0, 16
9475; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9476; ZVFHMIN-NEXT:    csrr a0, vlenb
9477; ZVFHMIN-NEXT:    slli a0, a0, 5
9478; ZVFHMIN-NEXT:    add a0, sp, a0
9479; ZVFHMIN-NEXT:    addi a0, a0, 16
9480; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9481; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9482; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
9483; ZVFHMIN-NEXT:    vmv.v.v v16, v8
9484; ZVFHMIN-NEXT:    csrr a0, vlenb
9485; ZVFHMIN-NEXT:    slli a0, a0, 3
9486; ZVFHMIN-NEXT:    add a0, sp, a0
9487; ZVFHMIN-NEXT:    addi a0, a0, 16
9488; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9489; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9490; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
9491; ZVFHMIN-NEXT:    csrr a0, vlenb
9492; ZVFHMIN-NEXT:    slli a0, a0, 4
9493; ZVFHMIN-NEXT:    mv a1, a0
9494; ZVFHMIN-NEXT:    slli a0, a0, 1
9495; ZVFHMIN-NEXT:    add a0, a0, a1
9496; ZVFHMIN-NEXT:    add sp, sp, a0
9497; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
9498; ZVFHMIN-NEXT:    addi sp, sp, 16
9499; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
9500; ZVFHMIN-NEXT:    ret
9501  %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl)
9502  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl)
9503  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
9504  ret <vscale x 32 x half> %v
9505}
9506
9507define <vscale x 32 x half> @vfnmadd_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) {
9508; ZVFH-LABEL: vfnmadd_vv_nxv32f16_unmasked:
9509; ZVFH:       # %bb.0:
9510; ZVFH-NEXT:    vl8re16.v v24, (a0)
9511; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9512; ZVFH-NEXT:    vfnmadd.vv v8, v16, v24
9513; ZVFH-NEXT:    ret
9514;
9515; ZVFHMIN-LABEL: vfnmadd_vv_nxv32f16_unmasked:
9516; ZVFHMIN:       # %bb.0:
9517; ZVFHMIN-NEXT:    addi sp, sp, -16
9518; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
9519; ZVFHMIN-NEXT:    csrr a2, vlenb
9520; ZVFHMIN-NEXT:    slli a2, a2, 5
9521; ZVFHMIN-NEXT:    sub sp, sp, a2
9522; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
9523; ZVFHMIN-NEXT:    csrr a2, vlenb
9524; ZVFHMIN-NEXT:    slli a2, a2, 3
9525; ZVFHMIN-NEXT:    mv a3, a2
9526; ZVFHMIN-NEXT:    slli a2, a2, 1
9527; ZVFHMIN-NEXT:    add a2, a2, a3
9528; ZVFHMIN-NEXT:    add a2, sp, a2
9529; ZVFHMIN-NEXT:    addi a2, a2, 16
9530; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9531; ZVFHMIN-NEXT:    vl8re16.v v24, (a0)
9532; ZVFHMIN-NEXT:    lui a2, 8
9533; ZVFHMIN-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
9534; ZVFHMIN-NEXT:    vmset.m v8
9535; ZVFHMIN-NEXT:    csrr a3, vlenb
9536; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9537; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2
9538; ZVFHMIN-NEXT:    slli a0, a3, 1
9539; ZVFHMIN-NEXT:    srli a3, a3, 2
9540; ZVFHMIN-NEXT:    sub a4, a1, a0
9541; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
9542; ZVFHMIN-NEXT:    vslidedown.vx v0, v8, a3
9543; ZVFHMIN-NEXT:    sltu a3, a1, a4
9544; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9545; ZVFHMIN-NEXT:    vxor.vx v8, v24, a2
9546; ZVFHMIN-NEXT:    addi a3, a3, -1
9547; ZVFHMIN-NEXT:    and a3, a3, a4
9548; ZVFHMIN-NEXT:    csrr a2, vlenb
9549; ZVFHMIN-NEXT:    slli a2, a2, 3
9550; ZVFHMIN-NEXT:    add a2, sp, a2
9551; ZVFHMIN-NEXT:    addi a2, a2, 16
9552; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9553; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
9554; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
9555; ZVFHMIN-NEXT:    addi a2, sp, 16
9556; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9557; ZVFHMIN-NEXT:    csrr a2, vlenb
9558; ZVFHMIN-NEXT:    slli a2, a2, 4
9559; ZVFHMIN-NEXT:    add a2, sp, a2
9560; ZVFHMIN-NEXT:    addi a2, a2, 16
9561; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
9562; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
9563; ZVFHMIN-NEXT:    csrr a2, vlenb
9564; ZVFHMIN-NEXT:    slli a2, a2, 3
9565; ZVFHMIN-NEXT:    mv a3, a2
9566; ZVFHMIN-NEXT:    slli a2, a2, 1
9567; ZVFHMIN-NEXT:    add a2, a2, a3
9568; ZVFHMIN-NEXT:    add a2, sp, a2
9569; ZVFHMIN-NEXT:    addi a2, a2, 16
9570; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
9571; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
9572; ZVFHMIN-NEXT:    addi a2, sp, 16
9573; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
9574; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9575; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
9576; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9577; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
9578; ZVFHMIN-NEXT:    bltu a1, a0, .LBB288_2
9579; ZVFHMIN-NEXT:  # %bb.1:
9580; ZVFHMIN-NEXT:    mv a1, a0
9581; ZVFHMIN-NEXT:  .LBB288_2:
9582; ZVFHMIN-NEXT:    csrr a0, vlenb
9583; ZVFHMIN-NEXT:    slli a0, a0, 4
9584; ZVFHMIN-NEXT:    add a0, sp, a0
9585; ZVFHMIN-NEXT:    addi a0, a0, 16
9586; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9587; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
9588; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
9589; ZVFHMIN-NEXT:    addi a0, sp, 16
9590; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
9591; ZVFHMIN-NEXT:    csrr a0, vlenb
9592; ZVFHMIN-NEXT:    slli a0, a0, 3
9593; ZVFHMIN-NEXT:    add a0, sp, a0
9594; ZVFHMIN-NEXT:    addi a0, a0, 16
9595; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9596; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
9597; ZVFHMIN-NEXT:    csrr a0, vlenb
9598; ZVFHMIN-NEXT:    slli a0, a0, 3
9599; ZVFHMIN-NEXT:    mv a1, a0
9600; ZVFHMIN-NEXT:    slli a0, a0, 1
9601; ZVFHMIN-NEXT:    add a0, a0, a1
9602; ZVFHMIN-NEXT:    add a0, sp, a0
9603; ZVFHMIN-NEXT:    addi a0, a0, 16
9604; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9605; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
9606; ZVFHMIN-NEXT:    addi a0, sp, 16
9607; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9608; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9609; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v0
9610; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9611; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
9612; ZVFHMIN-NEXT:    csrr a0, vlenb
9613; ZVFHMIN-NEXT:    slli a0, a0, 5
9614; ZVFHMIN-NEXT:    add sp, sp, a0
9615; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
9616; ZVFHMIN-NEXT:    addi sp, sp, 16
9617; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
9618; ZVFHMIN-NEXT:    ret
9619  %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9620  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9621  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9622  ret <vscale x 32 x half> %v
9623}
9624
9625define <vscale x 32 x half> @vfnmadd_vv_nxv32f16_unmasked_commuted(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) {
9626; ZVFH-LABEL: vfnmadd_vv_nxv32f16_unmasked_commuted:
9627; ZVFH:       # %bb.0:
9628; ZVFH-NEXT:    vl8re16.v v24, (a0)
9629; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9630; ZVFH-NEXT:    vfnmadd.vv v8, v16, v24
9631; ZVFH-NEXT:    ret
9632;
9633; ZVFHMIN-LABEL: vfnmadd_vv_nxv32f16_unmasked_commuted:
9634; ZVFHMIN:       # %bb.0:
9635; ZVFHMIN-NEXT:    addi sp, sp, -16
9636; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
9637; ZVFHMIN-NEXT:    csrr a2, vlenb
9638; ZVFHMIN-NEXT:    slli a2, a2, 5
9639; ZVFHMIN-NEXT:    sub sp, sp, a2
9640; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
9641; ZVFHMIN-NEXT:    csrr a2, vlenb
9642; ZVFHMIN-NEXT:    slli a2, a2, 3
9643; ZVFHMIN-NEXT:    mv a3, a2
9644; ZVFHMIN-NEXT:    slli a2, a2, 1
9645; ZVFHMIN-NEXT:    add a2, a2, a3
9646; ZVFHMIN-NEXT:    add a2, sp, a2
9647; ZVFHMIN-NEXT:    addi a2, a2, 16
9648; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9649; ZVFHMIN-NEXT:    vl8re16.v v24, (a0)
9650; ZVFHMIN-NEXT:    lui a2, 8
9651; ZVFHMIN-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
9652; ZVFHMIN-NEXT:    vmset.m v7
9653; ZVFHMIN-NEXT:    csrr a3, vlenb
9654; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9655; ZVFHMIN-NEXT:    vxor.vx v8, v16, a2
9656; ZVFHMIN-NEXT:    slli a0, a3, 1
9657; ZVFHMIN-NEXT:    srli a3, a3, 2
9658; ZVFHMIN-NEXT:    sub a4, a1, a0
9659; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
9660; ZVFHMIN-NEXT:    vslidedown.vx v0, v7, a3
9661; ZVFHMIN-NEXT:    sltu a3, a1, a4
9662; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
9663; ZVFHMIN-NEXT:    vxor.vx v24, v24, a2
9664; ZVFHMIN-NEXT:    addi a3, a3, -1
9665; ZVFHMIN-NEXT:    and a3, a3, a4
9666; ZVFHMIN-NEXT:    csrr a2, vlenb
9667; ZVFHMIN-NEXT:    slli a2, a2, 3
9668; ZVFHMIN-NEXT:    add a2, sp, a2
9669; ZVFHMIN-NEXT:    addi a2, a2, 16
9670; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9671; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
9672; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
9673; ZVFHMIN-NEXT:    addi a2, sp, 16
9674; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
9675; ZVFHMIN-NEXT:    vmv4r.v v16, v8
9676; ZVFHMIN-NEXT:    csrr a2, vlenb
9677; ZVFHMIN-NEXT:    slli a2, a2, 4
9678; ZVFHMIN-NEXT:    add a2, sp, a2
9679; ZVFHMIN-NEXT:    addi a2, a2, 16
9680; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
9681; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
9682; ZVFHMIN-NEXT:    csrr a2, vlenb
9683; ZVFHMIN-NEXT:    slli a2, a2, 3
9684; ZVFHMIN-NEXT:    mv a3, a2
9685; ZVFHMIN-NEXT:    slli a2, a2, 1
9686; ZVFHMIN-NEXT:    add a2, a2, a3
9687; ZVFHMIN-NEXT:    add a2, sp, a2
9688; ZVFHMIN-NEXT:    addi a2, a2, 16
9689; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9690; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
9691; ZVFHMIN-NEXT:    addi a2, sp, 16
9692; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9693; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9694; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
9695; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9696; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
9697; ZVFHMIN-NEXT:    bltu a1, a0, .LBB289_2
9698; ZVFHMIN-NEXT:  # %bb.1:
9699; ZVFHMIN-NEXT:    mv a1, a0
9700; ZVFHMIN-NEXT:  .LBB289_2:
9701; ZVFHMIN-NEXT:    csrr a0, vlenb
9702; ZVFHMIN-NEXT:    slli a0, a0, 4
9703; ZVFHMIN-NEXT:    add a0, sp, a0
9704; ZVFHMIN-NEXT:    addi a0, a0, 16
9705; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9706; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
9707; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
9708; ZVFHMIN-NEXT:    addi a0, sp, 16
9709; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
9710; ZVFHMIN-NEXT:    csrr a0, vlenb
9711; ZVFHMIN-NEXT:    slli a0, a0, 3
9712; ZVFHMIN-NEXT:    add a0, sp, a0
9713; ZVFHMIN-NEXT:    addi a0, a0, 16
9714; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9715; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
9716; ZVFHMIN-NEXT:    csrr a0, vlenb
9717; ZVFHMIN-NEXT:    slli a0, a0, 3
9718; ZVFHMIN-NEXT:    mv a1, a0
9719; ZVFHMIN-NEXT:    slli a0, a0, 1
9720; ZVFHMIN-NEXT:    add a0, a0, a1
9721; ZVFHMIN-NEXT:    add a0, sp, a0
9722; ZVFHMIN-NEXT:    addi a0, a0, 16
9723; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9724; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
9725; ZVFHMIN-NEXT:    addi a0, sp, 16
9726; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9727; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9728; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
9729; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9730; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
9731; ZVFHMIN-NEXT:    csrr a0, vlenb
9732; ZVFHMIN-NEXT:    slli a0, a0, 5
9733; ZVFHMIN-NEXT:    add sp, sp, a0
9734; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
9735; ZVFHMIN-NEXT:    addi sp, sp, 16
9736; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
9737; ZVFHMIN-NEXT:    ret
9738  %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9739  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9740  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
9741  ret <vscale x 32 x half> %v
9742}
9743
9744define <vscale x 32 x half> @vfnmadd_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
9745; ZVFH-LABEL: vfnmadd_vf_nxv32f16:
9746; ZVFH:       # %bb.0:
9747; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
9748; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
9749; ZVFH-NEXT:    ret
9750;
9751; ZVFHMIN-LABEL: vfnmadd_vf_nxv32f16:
9752; ZVFHMIN:       # %bb.0:
9753; ZVFHMIN-NEXT:    addi sp, sp, -16
9754; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
9755; ZVFHMIN-NEXT:    csrr a1, vlenb
9756; ZVFHMIN-NEXT:    slli a1, a1, 3
9757; ZVFHMIN-NEXT:    mv a2, a1
9758; ZVFHMIN-NEXT:    slli a1, a1, 2
9759; ZVFHMIN-NEXT:    add a1, a1, a2
9760; ZVFHMIN-NEXT:    sub sp, sp, a1
9761; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
9762; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
9763; ZVFHMIN-NEXT:    vmv1r.v v7, v0
9764; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
9765; ZVFHMIN-NEXT:    lui a2, 8
9766; ZVFHMIN-NEXT:    csrr a3, vlenb
9767; ZVFHMIN-NEXT:    vmv.v.x v24, a1
9768; ZVFHMIN-NEXT:    csrr a1, vlenb
9769; ZVFHMIN-NEXT:    slli a1, a1, 5
9770; ZVFHMIN-NEXT:    add a1, sp, a1
9771; ZVFHMIN-NEXT:    addi a1, a1, 16
9772; ZVFHMIN-NEXT:    vs8r.v v24, (a1) # Unknown-size Folded Spill
9773; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
9774; ZVFHMIN-NEXT:    vxor.vx v24, v8, a2, v0.t
9775; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2, v0.t
9776; ZVFHMIN-NEXT:    slli a1, a3, 1
9777; ZVFHMIN-NEXT:    srli a3, a3, 2
9778; ZVFHMIN-NEXT:    sub a2, a0, a1
9779; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
9780; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
9781; ZVFHMIN-NEXT:    sltu a3, a0, a2
9782; ZVFHMIN-NEXT:    addi a3, a3, -1
9783; ZVFHMIN-NEXT:    and a2, a3, a2
9784; ZVFHMIN-NEXT:    csrr a3, vlenb
9785; ZVFHMIN-NEXT:    slli a3, a3, 4
9786; ZVFHMIN-NEXT:    add a3, sp, a3
9787; ZVFHMIN-NEXT:    addi a3, a3, 16
9788; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
9789; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
9790; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
9791; ZVFHMIN-NEXT:    csrr a2, vlenb
9792; ZVFHMIN-NEXT:    slli a2, a2, 3
9793; ZVFHMIN-NEXT:    add a2, sp, a2
9794; ZVFHMIN-NEXT:    addi a2, a2, 16
9795; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9796; ZVFHMIN-NEXT:    csrr a2, vlenb
9797; ZVFHMIN-NEXT:    slli a2, a2, 3
9798; ZVFHMIN-NEXT:    mv a3, a2
9799; ZVFHMIN-NEXT:    slli a2, a2, 1
9800; ZVFHMIN-NEXT:    add a2, a2, a3
9801; ZVFHMIN-NEXT:    add a2, sp, a2
9802; ZVFHMIN-NEXT:    addi a2, a2, 16
9803; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9804; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
9805; ZVFHMIN-NEXT:    csrr a2, vlenb
9806; ZVFHMIN-NEXT:    slli a2, a2, 5
9807; ZVFHMIN-NEXT:    add a2, sp, a2
9808; ZVFHMIN-NEXT:    addi a2, a2, 16
9809; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9810; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
9811; ZVFHMIN-NEXT:    csrr a2, vlenb
9812; ZVFHMIN-NEXT:    slli a2, a2, 3
9813; ZVFHMIN-NEXT:    add a2, sp, a2
9814; ZVFHMIN-NEXT:    addi a2, a2, 16
9815; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9816; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9817; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
9818; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9819; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
9820; ZVFHMIN-NEXT:    addi a2, sp, 16
9821; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9822; ZVFHMIN-NEXT:    bltu a0, a1, .LBB290_2
9823; ZVFHMIN-NEXT:  # %bb.1:
9824; ZVFHMIN-NEXT:    mv a0, a1
9825; ZVFHMIN-NEXT:  .LBB290_2:
9826; ZVFHMIN-NEXT:    vmv1r.v v0, v7
9827; ZVFHMIN-NEXT:    csrr a1, vlenb
9828; ZVFHMIN-NEXT:    slli a1, a1, 4
9829; ZVFHMIN-NEXT:    add a1, sp, a1
9830; ZVFHMIN-NEXT:    addi a1, a1, 16
9831; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
9832; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
9833; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
9834; ZVFHMIN-NEXT:    csrr a0, vlenb
9835; ZVFHMIN-NEXT:    slli a0, a0, 3
9836; ZVFHMIN-NEXT:    add a0, sp, a0
9837; ZVFHMIN-NEXT:    addi a0, a0, 16
9838; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
9839; ZVFHMIN-NEXT:    csrr a0, vlenb
9840; ZVFHMIN-NEXT:    slli a0, a0, 3
9841; ZVFHMIN-NEXT:    mv a1, a0
9842; ZVFHMIN-NEXT:    slli a0, a0, 1
9843; ZVFHMIN-NEXT:    add a0, a0, a1
9844; ZVFHMIN-NEXT:    add a0, sp, a0
9845; ZVFHMIN-NEXT:    addi a0, a0, 16
9846; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9847; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
9848; ZVFHMIN-NEXT:    csrr a0, vlenb
9849; ZVFHMIN-NEXT:    slli a0, a0, 4
9850; ZVFHMIN-NEXT:    add a0, sp, a0
9851; ZVFHMIN-NEXT:    addi a0, a0, 16
9852; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
9853; ZVFHMIN-NEXT:    csrr a0, vlenb
9854; ZVFHMIN-NEXT:    slli a0, a0, 5
9855; ZVFHMIN-NEXT:    add a0, sp, a0
9856; ZVFHMIN-NEXT:    addi a0, a0, 16
9857; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9858; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
9859; ZVFHMIN-NEXT:    csrr a0, vlenb
9860; ZVFHMIN-NEXT:    slli a0, a0, 3
9861; ZVFHMIN-NEXT:    add a0, sp, a0
9862; ZVFHMIN-NEXT:    addi a0, a0, 16
9863; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
9864; ZVFHMIN-NEXT:    csrr a0, vlenb
9865; ZVFHMIN-NEXT:    slli a0, a0, 4
9866; ZVFHMIN-NEXT:    add a0, sp, a0
9867; ZVFHMIN-NEXT:    addi a0, a0, 16
9868; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9869; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9870; ZVFHMIN-NEXT:    vfmadd.vv v8, v16, v24, v0.t
9871; ZVFHMIN-NEXT:    vmv.v.v v16, v8
9872; ZVFHMIN-NEXT:    addi a0, sp, 16
9873; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
9874; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9875; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
9876; ZVFHMIN-NEXT:    csrr a0, vlenb
9877; ZVFHMIN-NEXT:    slli a0, a0, 3
9878; ZVFHMIN-NEXT:    mv a1, a0
9879; ZVFHMIN-NEXT:    slli a0, a0, 2
9880; ZVFHMIN-NEXT:    add a0, a0, a1
9881; ZVFHMIN-NEXT:    add sp, sp, a0
9882; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
9883; ZVFHMIN-NEXT:    addi sp, sp, 16
9884; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
9885; ZVFHMIN-NEXT:    ret
9886  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
9887  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
9888  %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl)
9889  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
9890  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
9891  ret <vscale x 32 x half> %v
9892}
9893
9894define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
9895; ZVFH-LABEL: vfnmadd_vf_nxv32f16_commute:
9896; ZVFH:       # %bb.0:
9897; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
9898; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
9899; ZVFH-NEXT:    ret
9900;
9901; ZVFHMIN-LABEL: vfnmadd_vf_nxv32f16_commute:
9902; ZVFHMIN:       # %bb.0:
9903; ZVFHMIN-NEXT:    addi sp, sp, -16
9904; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
9905; ZVFHMIN-NEXT:    csrr a1, vlenb
9906; ZVFHMIN-NEXT:    slli a1, a1, 3
9907; ZVFHMIN-NEXT:    mv a2, a1
9908; ZVFHMIN-NEXT:    slli a1, a1, 2
9909; ZVFHMIN-NEXT:    add a1, a1, a2
9910; ZVFHMIN-NEXT:    sub sp, sp, a1
9911; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
9912; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
9913; ZVFHMIN-NEXT:    vmv1r.v v7, v0
9914; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
9915; ZVFHMIN-NEXT:    lui a2, 8
9916; ZVFHMIN-NEXT:    csrr a3, vlenb
9917; ZVFHMIN-NEXT:    vmv.v.x v24, a1
9918; ZVFHMIN-NEXT:    csrr a1, vlenb
9919; ZVFHMIN-NEXT:    slli a1, a1, 5
9920; ZVFHMIN-NEXT:    add a1, sp, a1
9921; ZVFHMIN-NEXT:    addi a1, a1, 16
9922; ZVFHMIN-NEXT:    vs8r.v v24, (a1) # Unknown-size Folded Spill
9923; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
9924; ZVFHMIN-NEXT:    vxor.vx v24, v8, a2, v0.t
9925; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2, v0.t
9926; ZVFHMIN-NEXT:    slli a1, a3, 1
9927; ZVFHMIN-NEXT:    srli a3, a3, 2
9928; ZVFHMIN-NEXT:    sub a2, a0, a1
9929; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
9930; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
9931; ZVFHMIN-NEXT:    sltu a3, a0, a2
9932; ZVFHMIN-NEXT:    addi a3, a3, -1
9933; ZVFHMIN-NEXT:    and a2, a3, a2
9934; ZVFHMIN-NEXT:    csrr a3, vlenb
9935; ZVFHMIN-NEXT:    slli a3, a3, 4
9936; ZVFHMIN-NEXT:    add a3, sp, a3
9937; ZVFHMIN-NEXT:    addi a3, a3, 16
9938; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
9939; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
9940; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
9941; ZVFHMIN-NEXT:    csrr a2, vlenb
9942; ZVFHMIN-NEXT:    slli a2, a2, 3
9943; ZVFHMIN-NEXT:    add a2, sp, a2
9944; ZVFHMIN-NEXT:    addi a2, a2, 16
9945; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9946; ZVFHMIN-NEXT:    csrr a2, vlenb
9947; ZVFHMIN-NEXT:    slli a2, a2, 3
9948; ZVFHMIN-NEXT:    mv a3, a2
9949; ZVFHMIN-NEXT:    slli a2, a2, 1
9950; ZVFHMIN-NEXT:    add a2, a2, a3
9951; ZVFHMIN-NEXT:    add a2, sp, a2
9952; ZVFHMIN-NEXT:    addi a2, a2, 16
9953; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
9954; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
9955; ZVFHMIN-NEXT:    csrr a2, vlenb
9956; ZVFHMIN-NEXT:    slli a2, a2, 5
9957; ZVFHMIN-NEXT:    add a2, sp, a2
9958; ZVFHMIN-NEXT:    addi a2, a2, 16
9959; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9960; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
9961; ZVFHMIN-NEXT:    csrr a2, vlenb
9962; ZVFHMIN-NEXT:    slli a2, a2, 3
9963; ZVFHMIN-NEXT:    add a2, sp, a2
9964; ZVFHMIN-NEXT:    addi a2, a2, 16
9965; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
9966; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
9967; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
9968; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
9969; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
9970; ZVFHMIN-NEXT:    addi a2, sp, 16
9971; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
9972; ZVFHMIN-NEXT:    bltu a0, a1, .LBB291_2
9973; ZVFHMIN-NEXT:  # %bb.1:
9974; ZVFHMIN-NEXT:    mv a0, a1
9975; ZVFHMIN-NEXT:  .LBB291_2:
9976; ZVFHMIN-NEXT:    vmv1r.v v0, v7
9977; ZVFHMIN-NEXT:    csrr a1, vlenb
9978; ZVFHMIN-NEXT:    slli a1, a1, 4
9979; ZVFHMIN-NEXT:    add a1, sp, a1
9980; ZVFHMIN-NEXT:    addi a1, a1, 16
9981; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
9982; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
9983; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
9984; ZVFHMIN-NEXT:    csrr a0, vlenb
9985; ZVFHMIN-NEXT:    slli a0, a0, 3
9986; ZVFHMIN-NEXT:    add a0, sp, a0
9987; ZVFHMIN-NEXT:    addi a0, a0, 16
9988; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
9989; ZVFHMIN-NEXT:    csrr a0, vlenb
9990; ZVFHMIN-NEXT:    slli a0, a0, 3
9991; ZVFHMIN-NEXT:    mv a1, a0
9992; ZVFHMIN-NEXT:    slli a0, a0, 1
9993; ZVFHMIN-NEXT:    add a0, a0, a1
9994; ZVFHMIN-NEXT:    add a0, sp, a0
9995; ZVFHMIN-NEXT:    addi a0, a0, 16
9996; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
9997; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t
9998; ZVFHMIN-NEXT:    csrr a0, vlenb
9999; ZVFHMIN-NEXT:    slli a0, a0, 5
10000; ZVFHMIN-NEXT:    add a0, sp, a0
10001; ZVFHMIN-NEXT:    addi a0, a0, 16
10002; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10003; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
10004; ZVFHMIN-NEXT:    csrr a0, vlenb
10005; ZVFHMIN-NEXT:    slli a0, a0, 3
10006; ZVFHMIN-NEXT:    mv a1, a0
10007; ZVFHMIN-NEXT:    slli a0, a0, 1
10008; ZVFHMIN-NEXT:    add a0, a0, a1
10009; ZVFHMIN-NEXT:    add a0, sp, a0
10010; ZVFHMIN-NEXT:    addi a0, a0, 16
10011; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
10012; ZVFHMIN-NEXT:    csrr a0, vlenb
10013; ZVFHMIN-NEXT:    slli a0, a0, 3
10014; ZVFHMIN-NEXT:    add a0, sp, a0
10015; ZVFHMIN-NEXT:    addi a0, a0, 16
10016; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10017; ZVFHMIN-NEXT:    csrr a0, vlenb
10018; ZVFHMIN-NEXT:    slli a0, a0, 3
10019; ZVFHMIN-NEXT:    mv a1, a0
10020; ZVFHMIN-NEXT:    slli a0, a0, 1
10021; ZVFHMIN-NEXT:    add a0, a0, a1
10022; ZVFHMIN-NEXT:    add a0, sp, a0
10023; ZVFHMIN-NEXT:    addi a0, a0, 16
10024; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
10025; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10026; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
10027; ZVFHMIN-NEXT:    vmv.v.v v16, v8
10028; ZVFHMIN-NEXT:    addi a0, sp, 16
10029; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
10030; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10031; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
10032; ZVFHMIN-NEXT:    csrr a0, vlenb
10033; ZVFHMIN-NEXT:    slli a0, a0, 3
10034; ZVFHMIN-NEXT:    mv a1, a0
10035; ZVFHMIN-NEXT:    slli a0, a0, 2
10036; ZVFHMIN-NEXT:    add a0, a0, a1
10037; ZVFHMIN-NEXT:    add sp, sp, a0
10038; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
10039; ZVFHMIN-NEXT:    addi sp, sp, 16
10040; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
10041; ZVFHMIN-NEXT:    ret
10042  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
10043  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
10044  %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl)
10045  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
10046  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
10047  ret <vscale x 32 x half> %v
10048}
10049
10050define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
10051; ZVFH-LABEL: vfnmadd_vf_nxv32f16_unmasked:
10052; ZVFH:       # %bb.0:
10053; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10054; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v16
10055; ZVFH-NEXT:    ret
10056;
10057; ZVFHMIN-LABEL: vfnmadd_vf_nxv32f16_unmasked:
10058; ZVFHMIN:       # %bb.0:
10059; ZVFHMIN-NEXT:    addi sp, sp, -16
10060; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
10061; ZVFHMIN-NEXT:    csrr a1, vlenb
10062; ZVFHMIN-NEXT:    slli a1, a1, 5
10063; ZVFHMIN-NEXT:    sub sp, sp, a1
10064; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
10065; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
10066; ZVFHMIN-NEXT:    lui a1, 8
10067; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
10068; ZVFHMIN-NEXT:    vmset.m v24
10069; ZVFHMIN-NEXT:    csrr a3, vlenb
10070; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10071; ZVFHMIN-NEXT:    vxor.vx v8, v8, a1
10072; ZVFHMIN-NEXT:    vxor.vx v16, v16, a1
10073; ZVFHMIN-NEXT:    slli a1, a3, 1
10074; ZVFHMIN-NEXT:    srli a3, a3, 2
10075; ZVFHMIN-NEXT:    sub a4, a0, a1
10076; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
10077; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
10078; ZVFHMIN-NEXT:    sltu a3, a0, a4
10079; ZVFHMIN-NEXT:    addi a3, a3, -1
10080; ZVFHMIN-NEXT:    and a3, a3, a4
10081; ZVFHMIN-NEXT:    csrr a4, vlenb
10082; ZVFHMIN-NEXT:    slli a4, a4, 4
10083; ZVFHMIN-NEXT:    add a4, sp, a4
10084; ZVFHMIN-NEXT:    addi a4, a4, 16
10085; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
10086; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
10087; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
10088; ZVFHMIN-NEXT:    csrr a4, vlenb
10089; ZVFHMIN-NEXT:    slli a4, a4, 3
10090; ZVFHMIN-NEXT:    add a4, sp, a4
10091; ZVFHMIN-NEXT:    addi a4, a4, 16
10092; ZVFHMIN-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
10093; ZVFHMIN-NEXT:    csrr a4, vlenb
10094; ZVFHMIN-NEXT:    slli a4, a4, 3
10095; ZVFHMIN-NEXT:    mv a5, a4
10096; ZVFHMIN-NEXT:    slli a4, a4, 1
10097; ZVFHMIN-NEXT:    add a4, a4, a5
10098; ZVFHMIN-NEXT:    add a4, sp, a4
10099; ZVFHMIN-NEXT:    addi a4, a4, 16
10100; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
10101; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
10102; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
10103; ZVFHMIN-NEXT:    vmv.v.x v8, a2
10104; ZVFHMIN-NEXT:    addi a2, sp, 16
10105; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10106; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
10107; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
10108; ZVFHMIN-NEXT:    csrr a2, vlenb
10109; ZVFHMIN-NEXT:    slli a2, a2, 3
10110; ZVFHMIN-NEXT:    add a2, sp, a2
10111; ZVFHMIN-NEXT:    addi a2, a2, 16
10112; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
10113; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10114; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
10115; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10116; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
10117; ZVFHMIN-NEXT:    bltu a0, a1, .LBB292_2
10118; ZVFHMIN-NEXT:  # %bb.1:
10119; ZVFHMIN-NEXT:    mv a0, a1
10120; ZVFHMIN-NEXT:  .LBB292_2:
10121; ZVFHMIN-NEXT:    csrr a1, vlenb
10122; ZVFHMIN-NEXT:    slli a1, a1, 4
10123; ZVFHMIN-NEXT:    add a1, sp, a1
10124; ZVFHMIN-NEXT:    addi a1, a1, 16
10125; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
10126; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
10127; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
10128; ZVFHMIN-NEXT:    csrr a0, vlenb
10129; ZVFHMIN-NEXT:    slli a0, a0, 3
10130; ZVFHMIN-NEXT:    add a0, sp, a0
10131; ZVFHMIN-NEXT:    addi a0, a0, 16
10132; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
10133; ZVFHMIN-NEXT:    csrr a0, vlenb
10134; ZVFHMIN-NEXT:    slli a0, a0, 3
10135; ZVFHMIN-NEXT:    mv a1, a0
10136; ZVFHMIN-NEXT:    slli a0, a0, 1
10137; ZVFHMIN-NEXT:    add a0, a0, a1
10138; ZVFHMIN-NEXT:    add a0, sp, a0
10139; ZVFHMIN-NEXT:    addi a0, a0, 16
10140; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
10141; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
10142; ZVFHMIN-NEXT:    addi a0, sp, 16
10143; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10144; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
10145; ZVFHMIN-NEXT:    csrr a0, vlenb
10146; ZVFHMIN-NEXT:    slli a0, a0, 3
10147; ZVFHMIN-NEXT:    add a0, sp, a0
10148; ZVFHMIN-NEXT:    addi a0, a0, 16
10149; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10150; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10151; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v16
10152; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10153; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
10154; ZVFHMIN-NEXT:    csrr a0, vlenb
10155; ZVFHMIN-NEXT:    slli a0, a0, 5
10156; ZVFHMIN-NEXT:    add sp, sp, a0
10157; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
10158; ZVFHMIN-NEXT:    addi sp, sp, 16
10159; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
10160; ZVFHMIN-NEXT:    ret
10161  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
10162  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
10163  %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10164  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10165  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10166  ret <vscale x 32 x half> %v
10167}
10168
10169define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
10170; ZVFH-LABEL: vfnmadd_vf_nxv32f16_unmasked_commute:
10171; ZVFH:       # %bb.0:
10172; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10173; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v16
10174; ZVFH-NEXT:    ret
10175;
10176; ZVFHMIN-LABEL: vfnmadd_vf_nxv32f16_unmasked_commute:
10177; ZVFHMIN:       # %bb.0:
10178; ZVFHMIN-NEXT:    addi sp, sp, -16
10179; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
10180; ZVFHMIN-NEXT:    csrr a1, vlenb
10181; ZVFHMIN-NEXT:    slli a1, a1, 5
10182; ZVFHMIN-NEXT:    sub sp, sp, a1
10183; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
10184; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
10185; ZVFHMIN-NEXT:    lui a1, 8
10186; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
10187; ZVFHMIN-NEXT:    vmset.m v24
10188; ZVFHMIN-NEXT:    csrr a3, vlenb
10189; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10190; ZVFHMIN-NEXT:    vxor.vx v8, v8, a1
10191; ZVFHMIN-NEXT:    vxor.vx v16, v16, a1
10192; ZVFHMIN-NEXT:    slli a1, a3, 1
10193; ZVFHMIN-NEXT:    srli a3, a3, 2
10194; ZVFHMIN-NEXT:    sub a4, a0, a1
10195; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
10196; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
10197; ZVFHMIN-NEXT:    sltu a3, a0, a4
10198; ZVFHMIN-NEXT:    addi a3, a3, -1
10199; ZVFHMIN-NEXT:    and a3, a3, a4
10200; ZVFHMIN-NEXT:    csrr a4, vlenb
10201; ZVFHMIN-NEXT:    slli a4, a4, 3
10202; ZVFHMIN-NEXT:    add a4, sp, a4
10203; ZVFHMIN-NEXT:    addi a4, a4, 16
10204; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
10205; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
10206; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
10207; ZVFHMIN-NEXT:    addi a4, sp, 16
10208; ZVFHMIN-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
10209; ZVFHMIN-NEXT:    csrr a4, vlenb
10210; ZVFHMIN-NEXT:    slli a4, a4, 4
10211; ZVFHMIN-NEXT:    add a4, sp, a4
10212; ZVFHMIN-NEXT:    addi a4, a4, 16
10213; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
10214; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
10215; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
10216; ZVFHMIN-NEXT:    vmv.v.x v8, a2
10217; ZVFHMIN-NEXT:    csrr a2, vlenb
10218; ZVFHMIN-NEXT:    slli a2, a2, 3
10219; ZVFHMIN-NEXT:    mv a4, a2
10220; ZVFHMIN-NEXT:    slli a2, a2, 1
10221; ZVFHMIN-NEXT:    add a2, a2, a4
10222; ZVFHMIN-NEXT:    add a2, sp, a2
10223; ZVFHMIN-NEXT:    addi a2, a2, 16
10224; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10225; ZVFHMIN-NEXT:    csrr a2, vlenb
10226; ZVFHMIN-NEXT:    slli a2, a2, 3
10227; ZVFHMIN-NEXT:    mv a4, a2
10228; ZVFHMIN-NEXT:    slli a2, a2, 1
10229; ZVFHMIN-NEXT:    add a2, a2, a4
10230; ZVFHMIN-NEXT:    add a2, sp, a2
10231; ZVFHMIN-NEXT:    addi a2, a2, 16
10232; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
10233; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
10234; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
10235; ZVFHMIN-NEXT:    addi a2, sp, 16
10236; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
10237; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10238; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
10239; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10240; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
10241; ZVFHMIN-NEXT:    bltu a0, a1, .LBB293_2
10242; ZVFHMIN-NEXT:  # %bb.1:
10243; ZVFHMIN-NEXT:    mv a0, a1
10244; ZVFHMIN-NEXT:  .LBB293_2:
10245; ZVFHMIN-NEXT:    csrr a1, vlenb
10246; ZVFHMIN-NEXT:    slli a1, a1, 3
10247; ZVFHMIN-NEXT:    add a1, sp, a1
10248; ZVFHMIN-NEXT:    addi a1, a1, 16
10249; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
10250; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
10251; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
10252; ZVFHMIN-NEXT:    addi a0, sp, 16
10253; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
10254; ZVFHMIN-NEXT:    csrr a0, vlenb
10255; ZVFHMIN-NEXT:    slli a0, a0, 4
10256; ZVFHMIN-NEXT:    add a0, sp, a0
10257; ZVFHMIN-NEXT:    addi a0, a0, 16
10258; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
10259; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
10260; ZVFHMIN-NEXT:    csrr a0, vlenb
10261; ZVFHMIN-NEXT:    slli a0, a0, 3
10262; ZVFHMIN-NEXT:    mv a1, a0
10263; ZVFHMIN-NEXT:    slli a0, a0, 1
10264; ZVFHMIN-NEXT:    add a0, a0, a1
10265; ZVFHMIN-NEXT:    add a0, sp, a0
10266; ZVFHMIN-NEXT:    addi a0, a0, 16
10267; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10268; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
10269; ZVFHMIN-NEXT:    addi a0, sp, 16
10270; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10271; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10272; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v16
10273; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10274; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
10275; ZVFHMIN-NEXT:    csrr a0, vlenb
10276; ZVFHMIN-NEXT:    slli a0, a0, 5
10277; ZVFHMIN-NEXT:    add sp, sp, a0
10278; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
10279; ZVFHMIN-NEXT:    addi sp, sp, 16
10280; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
10281; ZVFHMIN-NEXT:    ret
10282  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
10283  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
10284  %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10285  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10286  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10287  ret <vscale x 32 x half> %v
10288}
10289
10290define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_neg_splat(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
10291; ZVFH-LABEL: vfnmadd_vf_nxv32f16_neg_splat:
10292; ZVFH:       # %bb.0:
10293; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10294; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
10295; ZVFH-NEXT:    ret
10296;
10297; ZVFHMIN-LABEL: vfnmadd_vf_nxv32f16_neg_splat:
10298; ZVFHMIN:       # %bb.0:
10299; ZVFHMIN-NEXT:    addi sp, sp, -16
10300; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
10301; ZVFHMIN-NEXT:    csrr a1, vlenb
10302; ZVFHMIN-NEXT:    slli a1, a1, 3
10303; ZVFHMIN-NEXT:    mv a2, a1
10304; ZVFHMIN-NEXT:    slli a1, a1, 2
10305; ZVFHMIN-NEXT:    add a1, a1, a2
10306; ZVFHMIN-NEXT:    sub sp, sp, a1
10307; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
10308; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10309; ZVFHMIN-NEXT:    vmv1r.v v7, v0
10310; ZVFHMIN-NEXT:    csrr a1, vlenb
10311; ZVFHMIN-NEXT:    slli a1, a1, 5
10312; ZVFHMIN-NEXT:    add a1, sp, a1
10313; ZVFHMIN-NEXT:    addi a1, a1, 16
10314; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
10315; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
10316; ZVFHMIN-NEXT:    lui a2, 8
10317; ZVFHMIN-NEXT:    csrr a3, vlenb
10318; ZVFHMIN-NEXT:    vmv.v.x v24, a1
10319; ZVFHMIN-NEXT:    slli a1, a3, 1
10320; ZVFHMIN-NEXT:    srli a3, a3, 2
10321; ZVFHMIN-NEXT:    vxor.vx v8, v24, a2, v0.t
10322; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2, v0.t
10323; ZVFHMIN-NEXT:    sub a2, a0, a1
10324; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
10325; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
10326; ZVFHMIN-NEXT:    sltu a3, a0, a2
10327; ZVFHMIN-NEXT:    addi a3, a3, -1
10328; ZVFHMIN-NEXT:    and a2, a3, a2
10329; ZVFHMIN-NEXT:    csrr a3, vlenb
10330; ZVFHMIN-NEXT:    slli a3, a3, 4
10331; ZVFHMIN-NEXT:    add a3, sp, a3
10332; ZVFHMIN-NEXT:    addi a3, a3, 16
10333; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
10334; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
10335; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
10336; ZVFHMIN-NEXT:    csrr a2, vlenb
10337; ZVFHMIN-NEXT:    slli a2, a2, 3
10338; ZVFHMIN-NEXT:    add a2, sp, a2
10339; ZVFHMIN-NEXT:    addi a2, a2, 16
10340; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
10341; ZVFHMIN-NEXT:    csrr a2, vlenb
10342; ZVFHMIN-NEXT:    slli a2, a2, 3
10343; ZVFHMIN-NEXT:    mv a3, a2
10344; ZVFHMIN-NEXT:    slli a2, a2, 1
10345; ZVFHMIN-NEXT:    add a2, a2, a3
10346; ZVFHMIN-NEXT:    add a2, sp, a2
10347; ZVFHMIN-NEXT:    addi a2, a2, 16
10348; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10349; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
10350; ZVFHMIN-NEXT:    csrr a2, vlenb
10351; ZVFHMIN-NEXT:    slli a2, a2, 5
10352; ZVFHMIN-NEXT:    add a2, sp, a2
10353; ZVFHMIN-NEXT:    addi a2, a2, 16
10354; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
10355; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
10356; ZVFHMIN-NEXT:    csrr a2, vlenb
10357; ZVFHMIN-NEXT:    slli a2, a2, 3
10358; ZVFHMIN-NEXT:    add a2, sp, a2
10359; ZVFHMIN-NEXT:    addi a2, a2, 16
10360; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
10361; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10362; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
10363; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10364; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
10365; ZVFHMIN-NEXT:    addi a2, sp, 16
10366; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10367; ZVFHMIN-NEXT:    bltu a0, a1, .LBB294_2
10368; ZVFHMIN-NEXT:  # %bb.1:
10369; ZVFHMIN-NEXT:    mv a0, a1
10370; ZVFHMIN-NEXT:  .LBB294_2:
10371; ZVFHMIN-NEXT:    vmv1r.v v0, v7
10372; ZVFHMIN-NEXT:    csrr a1, vlenb
10373; ZVFHMIN-NEXT:    slli a1, a1, 4
10374; ZVFHMIN-NEXT:    add a1, sp, a1
10375; ZVFHMIN-NEXT:    addi a1, a1, 16
10376; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
10377; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
10378; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
10379; ZVFHMIN-NEXT:    csrr a0, vlenb
10380; ZVFHMIN-NEXT:    slli a0, a0, 3
10381; ZVFHMIN-NEXT:    add a0, sp, a0
10382; ZVFHMIN-NEXT:    addi a0, a0, 16
10383; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
10384; ZVFHMIN-NEXT:    csrr a0, vlenb
10385; ZVFHMIN-NEXT:    slli a0, a0, 3
10386; ZVFHMIN-NEXT:    mv a1, a0
10387; ZVFHMIN-NEXT:    slli a0, a0, 1
10388; ZVFHMIN-NEXT:    add a0, a0, a1
10389; ZVFHMIN-NEXT:    add a0, sp, a0
10390; ZVFHMIN-NEXT:    addi a0, a0, 16
10391; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10392; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t
10393; ZVFHMIN-NEXT:    csrr a0, vlenb
10394; ZVFHMIN-NEXT:    slli a0, a0, 5
10395; ZVFHMIN-NEXT:    add a0, sp, a0
10396; ZVFHMIN-NEXT:    addi a0, a0, 16
10397; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10398; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
10399; ZVFHMIN-NEXT:    csrr a0, vlenb
10400; ZVFHMIN-NEXT:    slli a0, a0, 3
10401; ZVFHMIN-NEXT:    mv a1, a0
10402; ZVFHMIN-NEXT:    slli a0, a0, 1
10403; ZVFHMIN-NEXT:    add a0, a0, a1
10404; ZVFHMIN-NEXT:    add a0, sp, a0
10405; ZVFHMIN-NEXT:    addi a0, a0, 16
10406; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
10407; ZVFHMIN-NEXT:    csrr a0, vlenb
10408; ZVFHMIN-NEXT:    slli a0, a0, 3
10409; ZVFHMIN-NEXT:    add a0, sp, a0
10410; ZVFHMIN-NEXT:    addi a0, a0, 16
10411; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10412; ZVFHMIN-NEXT:    csrr a0, vlenb
10413; ZVFHMIN-NEXT:    slli a0, a0, 3
10414; ZVFHMIN-NEXT:    mv a1, a0
10415; ZVFHMIN-NEXT:    slli a0, a0, 1
10416; ZVFHMIN-NEXT:    add a0, a0, a1
10417; ZVFHMIN-NEXT:    add a0, sp, a0
10418; ZVFHMIN-NEXT:    addi a0, a0, 16
10419; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
10420; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10421; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
10422; ZVFHMIN-NEXT:    vmv.v.v v16, v8
10423; ZVFHMIN-NEXT:    addi a0, sp, 16
10424; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
10425; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10426; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
10427; ZVFHMIN-NEXT:    csrr a0, vlenb
10428; ZVFHMIN-NEXT:    slli a0, a0, 3
10429; ZVFHMIN-NEXT:    mv a1, a0
10430; ZVFHMIN-NEXT:    slli a0, a0, 2
10431; ZVFHMIN-NEXT:    add a0, a0, a1
10432; ZVFHMIN-NEXT:    add sp, sp, a0
10433; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
10434; ZVFHMIN-NEXT:    addi sp, sp, 16
10435; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
10436; ZVFHMIN-NEXT:    ret
10437  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
10438  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
10439  %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl)
10440  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
10441  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
10442  ret <vscale x 32 x half> %v
10443}
10444
10445define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_neg_splat_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
10446; ZVFH-LABEL: vfnmadd_vf_nxv32f16_neg_splat_commute:
10447; ZVFH:       # %bb.0:
10448; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10449; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
10450; ZVFH-NEXT:    ret
10451;
10452; ZVFHMIN-LABEL: vfnmadd_vf_nxv32f16_neg_splat_commute:
10453; ZVFHMIN:       # %bb.0:
10454; ZVFHMIN-NEXT:    addi sp, sp, -16
10455; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
10456; ZVFHMIN-NEXT:    csrr a1, vlenb
10457; ZVFHMIN-NEXT:    slli a1, a1, 3
10458; ZVFHMIN-NEXT:    mv a2, a1
10459; ZVFHMIN-NEXT:    slli a1, a1, 2
10460; ZVFHMIN-NEXT:    add a1, a1, a2
10461; ZVFHMIN-NEXT:    sub sp, sp, a1
10462; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
10463; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10464; ZVFHMIN-NEXT:    vmv1r.v v7, v0
10465; ZVFHMIN-NEXT:    csrr a1, vlenb
10466; ZVFHMIN-NEXT:    slli a1, a1, 3
10467; ZVFHMIN-NEXT:    mv a2, a1
10468; ZVFHMIN-NEXT:    slli a1, a1, 1
10469; ZVFHMIN-NEXT:    add a1, a1, a2
10470; ZVFHMIN-NEXT:    add a1, sp, a1
10471; ZVFHMIN-NEXT:    addi a1, a1, 16
10472; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
10473; ZVFHMIN-NEXT:    csrr a1, vlenb
10474; ZVFHMIN-NEXT:    slli a1, a1, 5
10475; ZVFHMIN-NEXT:    add a1, sp, a1
10476; ZVFHMIN-NEXT:    addi a1, a1, 16
10477; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
10478; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
10479; ZVFHMIN-NEXT:    lui a2, 8
10480; ZVFHMIN-NEXT:    csrr a3, vlenb
10481; ZVFHMIN-NEXT:    vmv.v.x v16, a1
10482; ZVFHMIN-NEXT:    slli a1, a3, 1
10483; ZVFHMIN-NEXT:    srli a3, a3, 2
10484; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2, v0.t
10485; ZVFHMIN-NEXT:    csrr a4, vlenb
10486; ZVFHMIN-NEXT:    slli a4, a4, 3
10487; ZVFHMIN-NEXT:    mv a5, a4
10488; ZVFHMIN-NEXT:    slli a4, a4, 1
10489; ZVFHMIN-NEXT:    add a4, a4, a5
10490; ZVFHMIN-NEXT:    add a4, sp, a4
10491; ZVFHMIN-NEXT:    addi a4, a4, 16
10492; ZVFHMIN-NEXT:    vl8r.v v8, (a4) # Unknown-size Folded Reload
10493; ZVFHMIN-NEXT:    vxor.vx v8, v8, a2, v0.t
10494; ZVFHMIN-NEXT:    sub a2, a0, a1
10495; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
10496; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
10497; ZVFHMIN-NEXT:    sltu a3, a0, a2
10498; ZVFHMIN-NEXT:    addi a3, a3, -1
10499; ZVFHMIN-NEXT:    and a2, a3, a2
10500; ZVFHMIN-NEXT:    csrr a3, vlenb
10501; ZVFHMIN-NEXT:    slli a3, a3, 4
10502; ZVFHMIN-NEXT:    add a3, sp, a3
10503; ZVFHMIN-NEXT:    addi a3, a3, 16
10504; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
10505; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
10506; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
10507; ZVFHMIN-NEXT:    csrr a2, vlenb
10508; ZVFHMIN-NEXT:    slli a2, a2, 3
10509; ZVFHMIN-NEXT:    add a2, sp, a2
10510; ZVFHMIN-NEXT:    addi a2, a2, 16
10511; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
10512; ZVFHMIN-NEXT:    csrr a2, vlenb
10513; ZVFHMIN-NEXT:    slli a2, a2, 3
10514; ZVFHMIN-NEXT:    mv a3, a2
10515; ZVFHMIN-NEXT:    slli a2, a2, 1
10516; ZVFHMIN-NEXT:    add a2, a2, a3
10517; ZVFHMIN-NEXT:    add a2, sp, a2
10518; ZVFHMIN-NEXT:    addi a2, a2, 16
10519; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
10520; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
10521; ZVFHMIN-NEXT:    vmv8r.v v16, v8
10522; ZVFHMIN-NEXT:    csrr a2, vlenb
10523; ZVFHMIN-NEXT:    slli a2, a2, 5
10524; ZVFHMIN-NEXT:    add a2, sp, a2
10525; ZVFHMIN-NEXT:    addi a2, a2, 16
10526; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
10527; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
10528; ZVFHMIN-NEXT:    csrr a2, vlenb
10529; ZVFHMIN-NEXT:    slli a2, a2, 3
10530; ZVFHMIN-NEXT:    add a2, sp, a2
10531; ZVFHMIN-NEXT:    addi a2, a2, 16
10532; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
10533; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10534; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
10535; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10536; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
10537; ZVFHMIN-NEXT:    addi a2, sp, 16
10538; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10539; ZVFHMIN-NEXT:    bltu a0, a1, .LBB295_2
10540; ZVFHMIN-NEXT:  # %bb.1:
10541; ZVFHMIN-NEXT:    mv a0, a1
10542; ZVFHMIN-NEXT:  .LBB295_2:
10543; ZVFHMIN-NEXT:    vmv1r.v v0, v7
10544; ZVFHMIN-NEXT:    csrr a1, vlenb
10545; ZVFHMIN-NEXT:    slli a1, a1, 4
10546; ZVFHMIN-NEXT:    add a1, sp, a1
10547; ZVFHMIN-NEXT:    addi a1, a1, 16
10548; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
10549; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
10550; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
10551; ZVFHMIN-NEXT:    csrr a0, vlenb
10552; ZVFHMIN-NEXT:    slli a0, a0, 3
10553; ZVFHMIN-NEXT:    add a0, sp, a0
10554; ZVFHMIN-NEXT:    addi a0, a0, 16
10555; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
10556; ZVFHMIN-NEXT:    csrr a0, vlenb
10557; ZVFHMIN-NEXT:    slli a0, a0, 3
10558; ZVFHMIN-NEXT:    mv a1, a0
10559; ZVFHMIN-NEXT:    slli a0, a0, 1
10560; ZVFHMIN-NEXT:    add a0, a0, a1
10561; ZVFHMIN-NEXT:    add a0, sp, a0
10562; ZVFHMIN-NEXT:    addi a0, a0, 16
10563; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
10564; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
10565; ZVFHMIN-NEXT:    csrr a0, vlenb
10566; ZVFHMIN-NEXT:    slli a0, a0, 4
10567; ZVFHMIN-NEXT:    add a0, sp, a0
10568; ZVFHMIN-NEXT:    addi a0, a0, 16
10569; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
10570; ZVFHMIN-NEXT:    csrr a0, vlenb
10571; ZVFHMIN-NEXT:    slli a0, a0, 5
10572; ZVFHMIN-NEXT:    add a0, sp, a0
10573; ZVFHMIN-NEXT:    addi a0, a0, 16
10574; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
10575; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
10576; ZVFHMIN-NEXT:    csrr a0, vlenb
10577; ZVFHMIN-NEXT:    slli a0, a0, 3
10578; ZVFHMIN-NEXT:    add a0, sp, a0
10579; ZVFHMIN-NEXT:    addi a0, a0, 16
10580; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
10581; ZVFHMIN-NEXT:    csrr a0, vlenb
10582; ZVFHMIN-NEXT:    slli a0, a0, 4
10583; ZVFHMIN-NEXT:    add a0, sp, a0
10584; ZVFHMIN-NEXT:    addi a0, a0, 16
10585; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10586; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10587; ZVFHMIN-NEXT:    vfmadd.vv v8, v16, v24, v0.t
10588; ZVFHMIN-NEXT:    vmv.v.v v16, v8
10589; ZVFHMIN-NEXT:    addi a0, sp, 16
10590; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
10591; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10592; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
10593; ZVFHMIN-NEXT:    csrr a0, vlenb
10594; ZVFHMIN-NEXT:    slli a0, a0, 3
10595; ZVFHMIN-NEXT:    mv a1, a0
10596; ZVFHMIN-NEXT:    slli a0, a0, 2
10597; ZVFHMIN-NEXT:    add a0, a0, a1
10598; ZVFHMIN-NEXT:    add sp, sp, a0
10599; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
10600; ZVFHMIN-NEXT:    addi sp, sp, 16
10601; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
10602; ZVFHMIN-NEXT:    ret
10603  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
10604  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
10605  %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl)
10606  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
10607  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
10608  ret <vscale x 32 x half> %v
10609}
10610
10611define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_neg_splat_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
10612; ZVFH-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked:
10613; ZVFH:       # %bb.0:
10614; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10615; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v16
10616; ZVFH-NEXT:    ret
10617;
10618; ZVFHMIN-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked:
10619; ZVFHMIN:       # %bb.0:
10620; ZVFHMIN-NEXT:    addi sp, sp, -16
10621; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
10622; ZVFHMIN-NEXT:    csrr a1, vlenb
10623; ZVFHMIN-NEXT:    slli a1, a1, 5
10624; ZVFHMIN-NEXT:    sub sp, sp, a1
10625; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
10626; ZVFHMIN-NEXT:    csrr a1, vlenb
10627; ZVFHMIN-NEXT:    slli a1, a1, 3
10628; ZVFHMIN-NEXT:    mv a2, a1
10629; ZVFHMIN-NEXT:    slli a1, a1, 1
10630; ZVFHMIN-NEXT:    add a1, a1, a2
10631; ZVFHMIN-NEXT:    add a1, sp, a1
10632; ZVFHMIN-NEXT:    addi a1, a1, 16
10633; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
10634; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
10635; ZVFHMIN-NEXT:    lui a2, 8
10636; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
10637; ZVFHMIN-NEXT:    vmset.m v24
10638; ZVFHMIN-NEXT:    csrr a3, vlenb
10639; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10640; ZVFHMIN-NEXT:    vmv.v.x v0, a1
10641; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2
10642; ZVFHMIN-NEXT:    slli a1, a3, 1
10643; ZVFHMIN-NEXT:    srli a3, a3, 2
10644; ZVFHMIN-NEXT:    vxor.vx v8, v0, a2
10645; ZVFHMIN-NEXT:    sub a2, a0, a1
10646; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
10647; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
10648; ZVFHMIN-NEXT:    sltu a3, a0, a2
10649; ZVFHMIN-NEXT:    addi a3, a3, -1
10650; ZVFHMIN-NEXT:    and a2, a3, a2
10651; ZVFHMIN-NEXT:    csrr a3, vlenb
10652; ZVFHMIN-NEXT:    slli a3, a3, 4
10653; ZVFHMIN-NEXT:    add a3, sp, a3
10654; ZVFHMIN-NEXT:    addi a3, a3, 16
10655; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
10656; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
10657; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
10658; ZVFHMIN-NEXT:    addi a2, sp, 16
10659; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
10660; ZVFHMIN-NEXT:    csrr a2, vlenb
10661; ZVFHMIN-NEXT:    slli a2, a2, 3
10662; ZVFHMIN-NEXT:    add a2, sp, a2
10663; ZVFHMIN-NEXT:    addi a2, a2, 16
10664; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10665; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
10666; ZVFHMIN-NEXT:    csrr a2, vlenb
10667; ZVFHMIN-NEXT:    slli a2, a2, 3
10668; ZVFHMIN-NEXT:    mv a3, a2
10669; ZVFHMIN-NEXT:    slli a2, a2, 1
10670; ZVFHMIN-NEXT:    add a2, a2, a3
10671; ZVFHMIN-NEXT:    add a2, sp, a2
10672; ZVFHMIN-NEXT:    addi a2, a2, 16
10673; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
10674; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
10675; ZVFHMIN-NEXT:    addi a2, sp, 16
10676; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
10677; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10678; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
10679; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10680; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
10681; ZVFHMIN-NEXT:    bltu a0, a1, .LBB296_2
10682; ZVFHMIN-NEXT:  # %bb.1:
10683; ZVFHMIN-NEXT:    mv a0, a1
10684; ZVFHMIN-NEXT:  .LBB296_2:
10685; ZVFHMIN-NEXT:    csrr a1, vlenb
10686; ZVFHMIN-NEXT:    slli a1, a1, 4
10687; ZVFHMIN-NEXT:    add a1, sp, a1
10688; ZVFHMIN-NEXT:    addi a1, a1, 16
10689; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
10690; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
10691; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
10692; ZVFHMIN-NEXT:    addi a0, sp, 16
10693; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
10694; ZVFHMIN-NEXT:    csrr a0, vlenb
10695; ZVFHMIN-NEXT:    slli a0, a0, 3
10696; ZVFHMIN-NEXT:    add a0, sp, a0
10697; ZVFHMIN-NEXT:    addi a0, a0, 16
10698; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10699; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
10700; ZVFHMIN-NEXT:    csrr a0, vlenb
10701; ZVFHMIN-NEXT:    slli a0, a0, 3
10702; ZVFHMIN-NEXT:    mv a1, a0
10703; ZVFHMIN-NEXT:    slli a0, a0, 1
10704; ZVFHMIN-NEXT:    add a0, a0, a1
10705; ZVFHMIN-NEXT:    add a0, sp, a0
10706; ZVFHMIN-NEXT:    addi a0, a0, 16
10707; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10708; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
10709; ZVFHMIN-NEXT:    addi a0, sp, 16
10710; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
10711; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10712; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v16
10713; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10714; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
10715; ZVFHMIN-NEXT:    csrr a0, vlenb
10716; ZVFHMIN-NEXT:    slli a0, a0, 5
10717; ZVFHMIN-NEXT:    add sp, sp, a0
10718; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
10719; ZVFHMIN-NEXT:    addi sp, sp, 16
10720; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
10721; ZVFHMIN-NEXT:    ret
10722  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
10723  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
10724  %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10725  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10726  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10727  ret <vscale x 32 x half> %v
10728}
10729
10730define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_neg_splat_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
10731; ZVFH-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked_commute:
10732; ZVFH:       # %bb.0:
10733; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10734; ZVFH-NEXT:    vfnmadd.vf v8, fa0, v16
10735; ZVFH-NEXT:    ret
10736;
10737; ZVFHMIN-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked_commute:
10738; ZVFHMIN:       # %bb.0:
10739; ZVFHMIN-NEXT:    addi sp, sp, -16
10740; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
10741; ZVFHMIN-NEXT:    csrr a1, vlenb
10742; ZVFHMIN-NEXT:    slli a1, a1, 5
10743; ZVFHMIN-NEXT:    sub sp, sp, a1
10744; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
10745; ZVFHMIN-NEXT:    csrr a1, vlenb
10746; ZVFHMIN-NEXT:    slli a1, a1, 3
10747; ZVFHMIN-NEXT:    mv a2, a1
10748; ZVFHMIN-NEXT:    slli a1, a1, 1
10749; ZVFHMIN-NEXT:    add a1, a1, a2
10750; ZVFHMIN-NEXT:    add a1, sp, a1
10751; ZVFHMIN-NEXT:    addi a1, a1, 16
10752; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
10753; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
10754; ZVFHMIN-NEXT:    lui a2, 8
10755; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
10756; ZVFHMIN-NEXT:    vmset.m v7
10757; ZVFHMIN-NEXT:    csrr a3, vlenb
10758; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
10759; ZVFHMIN-NEXT:    vmv.v.x v24, a1
10760; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2
10761; ZVFHMIN-NEXT:    slli a1, a3, 1
10762; ZVFHMIN-NEXT:    srli a3, a3, 2
10763; ZVFHMIN-NEXT:    vxor.vx v8, v24, a2
10764; ZVFHMIN-NEXT:    sub a2, a0, a1
10765; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
10766; ZVFHMIN-NEXT:    vslidedown.vx v0, v7, a3
10767; ZVFHMIN-NEXT:    sltu a3, a0, a2
10768; ZVFHMIN-NEXT:    addi a3, a3, -1
10769; ZVFHMIN-NEXT:    and a2, a3, a2
10770; ZVFHMIN-NEXT:    csrr a3, vlenb
10771; ZVFHMIN-NEXT:    slli a3, a3, 4
10772; ZVFHMIN-NEXT:    add a3, sp, a3
10773; ZVFHMIN-NEXT:    addi a3, a3, 16
10774; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
10775; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
10776; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
10777; ZVFHMIN-NEXT:    addi a2, sp, 16
10778; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
10779; ZVFHMIN-NEXT:    csrr a2, vlenb
10780; ZVFHMIN-NEXT:    slli a2, a2, 3
10781; ZVFHMIN-NEXT:    add a2, sp, a2
10782; ZVFHMIN-NEXT:    addi a2, a2, 16
10783; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10784; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
10785; ZVFHMIN-NEXT:    csrr a2, vlenb
10786; ZVFHMIN-NEXT:    slli a2, a2, 3
10787; ZVFHMIN-NEXT:    mv a3, a2
10788; ZVFHMIN-NEXT:    slli a2, a2, 1
10789; ZVFHMIN-NEXT:    add a2, a2, a3
10790; ZVFHMIN-NEXT:    add a2, sp, a2
10791; ZVFHMIN-NEXT:    addi a2, a2, 16
10792; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
10793; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
10794; ZVFHMIN-NEXT:    addi a2, sp, 16
10795; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
10796; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10797; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
10798; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10799; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
10800; ZVFHMIN-NEXT:    bltu a0, a1, .LBB297_2
10801; ZVFHMIN-NEXT:  # %bb.1:
10802; ZVFHMIN-NEXT:    mv a0, a1
10803; ZVFHMIN-NEXT:  .LBB297_2:
10804; ZVFHMIN-NEXT:    csrr a1, vlenb
10805; ZVFHMIN-NEXT:    slli a1, a1, 4
10806; ZVFHMIN-NEXT:    add a1, sp, a1
10807; ZVFHMIN-NEXT:    addi a1, a1, 16
10808; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
10809; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
10810; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
10811; ZVFHMIN-NEXT:    addi a0, sp, 16
10812; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
10813; ZVFHMIN-NEXT:    csrr a0, vlenb
10814; ZVFHMIN-NEXT:    slli a0, a0, 3
10815; ZVFHMIN-NEXT:    add a0, sp, a0
10816; ZVFHMIN-NEXT:    addi a0, a0, 16
10817; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
10818; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
10819; ZVFHMIN-NEXT:    csrr a0, vlenb
10820; ZVFHMIN-NEXT:    slli a0, a0, 3
10821; ZVFHMIN-NEXT:    mv a1, a0
10822; ZVFHMIN-NEXT:    slli a0, a0, 1
10823; ZVFHMIN-NEXT:    add a0, a0, a1
10824; ZVFHMIN-NEXT:    add a0, sp, a0
10825; ZVFHMIN-NEXT:    addi a0, a0, 16
10826; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
10827; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
10828; ZVFHMIN-NEXT:    addi a0, sp, 16
10829; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
10830; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10831; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v8
10832; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10833; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v0
10834; ZVFHMIN-NEXT:    vmv8r.v v8, v16
10835; ZVFHMIN-NEXT:    csrr a0, vlenb
10836; ZVFHMIN-NEXT:    slli a0, a0, 5
10837; ZVFHMIN-NEXT:    add sp, sp, a0
10838; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
10839; ZVFHMIN-NEXT:    addi sp, sp, 16
10840; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
10841; ZVFHMIN-NEXT:    ret
10842  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
10843  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
10844  %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10845  %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10846  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
10847  ret <vscale x 32 x half> %v
10848}
10849
10850define <vscale x 32 x half> @vfnmsub_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
10851; ZVFH-LABEL: vfnmsub_vv_nxv32f16:
10852; ZVFH:       # %bb.0:
10853; ZVFH-NEXT:    vl8re16.v v24, (a0)
10854; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
10855; ZVFH-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
10856; ZVFH-NEXT:    vmv.v.v v8, v16
10857; ZVFH-NEXT:    ret
10858;
10859; ZVFHMIN-LABEL: vfnmsub_vv_nxv32f16:
10860; ZVFHMIN:       # %bb.0:
10861; ZVFHMIN-NEXT:    addi sp, sp, -16
10862; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
10863; ZVFHMIN-NEXT:    csrr a2, vlenb
10864; ZVFHMIN-NEXT:    slli a2, a2, 4
10865; ZVFHMIN-NEXT:    mv a3, a2
10866; ZVFHMIN-NEXT:    slli a2, a2, 1
10867; ZVFHMIN-NEXT:    add a2, a2, a3
10868; ZVFHMIN-NEXT:    sub sp, sp, a2
10869; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x30, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 48 * vlenb
10870; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
10871; ZVFHMIN-NEXT:    vmv1r.v v7, v0
10872; ZVFHMIN-NEXT:    csrr a2, vlenb
10873; ZVFHMIN-NEXT:    slli a2, a2, 3
10874; ZVFHMIN-NEXT:    mv a3, a2
10875; ZVFHMIN-NEXT:    slli a2, a2, 2
10876; ZVFHMIN-NEXT:    add a2, a2, a3
10877; ZVFHMIN-NEXT:    add a2, sp, a2
10878; ZVFHMIN-NEXT:    addi a2, a2, 16
10879; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10880; ZVFHMIN-NEXT:    vl8re16.v v24, (a0)
10881; ZVFHMIN-NEXT:    lui a2, 8
10882; ZVFHMIN-NEXT:    csrr a3, vlenb
10883; ZVFHMIN-NEXT:    vxor.vx v8, v16, a2, v0.t
10884; ZVFHMIN-NEXT:    csrr a0, vlenb
10885; ZVFHMIN-NEXT:    slli a0, a0, 5
10886; ZVFHMIN-NEXT:    add a0, sp, a0
10887; ZVFHMIN-NEXT:    addi a0, a0, 16
10888; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
10889; ZVFHMIN-NEXT:    slli a0, a3, 1
10890; ZVFHMIN-NEXT:    srli a3, a3, 2
10891; ZVFHMIN-NEXT:    sub a4, a1, a0
10892; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
10893; ZVFHMIN-NEXT:    vslidedown.vx v6, v0, a3
10894; ZVFHMIN-NEXT:    sltu a3, a1, a4
10895; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
10896; ZVFHMIN-NEXT:    vxor.vx v24, v24, a2, v0.t
10897; ZVFHMIN-NEXT:    addi a3, a3, -1
10898; ZVFHMIN-NEXT:    and a3, a3, a4
10899; ZVFHMIN-NEXT:    vmv1r.v v0, v6
10900; ZVFHMIN-NEXT:    csrr a2, vlenb
10901; ZVFHMIN-NEXT:    slli a2, a2, 3
10902; ZVFHMIN-NEXT:    mv a4, a2
10903; ZVFHMIN-NEXT:    slli a2, a2, 1
10904; ZVFHMIN-NEXT:    add a2, a2, a4
10905; ZVFHMIN-NEXT:    add a2, sp, a2
10906; ZVFHMIN-NEXT:    addi a2, a2, 16
10907; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
10908; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
10909; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
10910; ZVFHMIN-NEXT:    csrr a2, vlenb
10911; ZVFHMIN-NEXT:    slli a2, a2, 4
10912; ZVFHMIN-NEXT:    add a2, sp, a2
10913; ZVFHMIN-NEXT:    addi a2, a2, 16
10914; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10915; ZVFHMIN-NEXT:    csrr a2, vlenb
10916; ZVFHMIN-NEXT:    slli a2, a2, 5
10917; ZVFHMIN-NEXT:    add a2, sp, a2
10918; ZVFHMIN-NEXT:    addi a2, a2, 16
10919; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
10920; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
10921; ZVFHMIN-NEXT:    addi a2, sp, 16
10922; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
10923; ZVFHMIN-NEXT:    csrr a2, vlenb
10924; ZVFHMIN-NEXT:    slli a2, a2, 3
10925; ZVFHMIN-NEXT:    mv a3, a2
10926; ZVFHMIN-NEXT:    slli a2, a2, 2
10927; ZVFHMIN-NEXT:    add a2, a2, a3
10928; ZVFHMIN-NEXT:    add a2, sp, a2
10929; ZVFHMIN-NEXT:    addi a2, a2, 16
10930; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
10931; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
10932; ZVFHMIN-NEXT:    csrr a2, vlenb
10933; ZVFHMIN-NEXT:    slli a2, a2, 3
10934; ZVFHMIN-NEXT:    add a2, sp, a2
10935; ZVFHMIN-NEXT:    addi a2, a2, 16
10936; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
10937; ZVFHMIN-NEXT:    csrr a2, vlenb
10938; ZVFHMIN-NEXT:    slli a2, a2, 4
10939; ZVFHMIN-NEXT:    add a2, sp, a2
10940; ZVFHMIN-NEXT:    addi a2, a2, 16
10941; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
10942; ZVFHMIN-NEXT:    csrr a2, vlenb
10943; ZVFHMIN-NEXT:    slli a2, a2, 3
10944; ZVFHMIN-NEXT:    add a2, sp, a2
10945; ZVFHMIN-NEXT:    addi a2, a2, 16
10946; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
10947; ZVFHMIN-NEXT:    addi a2, sp, 16
10948; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
10949; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
10950; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
10951; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
10952; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
10953; ZVFHMIN-NEXT:    csrr a2, vlenb
10954; ZVFHMIN-NEXT:    slli a2, a2, 4
10955; ZVFHMIN-NEXT:    add a2, sp, a2
10956; ZVFHMIN-NEXT:    addi a2, a2, 16
10957; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
10958; ZVFHMIN-NEXT:    bltu a1, a0, .LBB298_2
10959; ZVFHMIN-NEXT:  # %bb.1:
10960; ZVFHMIN-NEXT:    mv a1, a0
10961; ZVFHMIN-NEXT:  .LBB298_2:
10962; ZVFHMIN-NEXT:    vmv1r.v v0, v7
10963; ZVFHMIN-NEXT:    csrr a0, vlenb
10964; ZVFHMIN-NEXT:    slli a0, a0, 5
10965; ZVFHMIN-NEXT:    add a0, sp, a0
10966; ZVFHMIN-NEXT:    addi a0, a0, 16
10967; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
10968; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
10969; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
10970; ZVFHMIN-NEXT:    csrr a0, vlenb
10971; ZVFHMIN-NEXT:    slli a0, a0, 3
10972; ZVFHMIN-NEXT:    add a0, sp, a0
10973; ZVFHMIN-NEXT:    addi a0, a0, 16
10974; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
10975; ZVFHMIN-NEXT:    csrr a0, vlenb
10976; ZVFHMIN-NEXT:    slli a0, a0, 3
10977; ZVFHMIN-NEXT:    mv a1, a0
10978; ZVFHMIN-NEXT:    slli a0, a0, 1
10979; ZVFHMIN-NEXT:    add a0, a0, a1
10980; ZVFHMIN-NEXT:    add a0, sp, a0
10981; ZVFHMIN-NEXT:    addi a0, a0, 16
10982; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
10983; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
10984; ZVFHMIN-NEXT:    csrr a0, vlenb
10985; ZVFHMIN-NEXT:    slli a0, a0, 5
10986; ZVFHMIN-NEXT:    add a0, sp, a0
10987; ZVFHMIN-NEXT:    addi a0, a0, 16
10988; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
10989; ZVFHMIN-NEXT:    csrr a0, vlenb
10990; ZVFHMIN-NEXT:    slli a0, a0, 3
10991; ZVFHMIN-NEXT:    mv a1, a0
10992; ZVFHMIN-NEXT:    slli a0, a0, 2
10993; ZVFHMIN-NEXT:    add a0, a0, a1
10994; ZVFHMIN-NEXT:    add a0, sp, a0
10995; ZVFHMIN-NEXT:    addi a0, a0, 16
10996; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
10997; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
10998; ZVFHMIN-NEXT:    csrr a0, vlenb
10999; ZVFHMIN-NEXT:    slli a0, a0, 5
11000; ZVFHMIN-NEXT:    add a0, sp, a0
11001; ZVFHMIN-NEXT:    addi a0, a0, 16
11002; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
11003; ZVFHMIN-NEXT:    csrr a0, vlenb
11004; ZVFHMIN-NEXT:    slli a0, a0, 3
11005; ZVFHMIN-NEXT:    add a0, sp, a0
11006; ZVFHMIN-NEXT:    addi a0, a0, 16
11007; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11008; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11009; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
11010; ZVFHMIN-NEXT:    csrr a0, vlenb
11011; ZVFHMIN-NEXT:    slli a0, a0, 4
11012; ZVFHMIN-NEXT:    add a0, sp, a0
11013; ZVFHMIN-NEXT:    addi a0, a0, 16
11014; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
11015; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11016; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
11017; ZVFHMIN-NEXT:    csrr a0, vlenb
11018; ZVFHMIN-NEXT:    slli a0, a0, 4
11019; ZVFHMIN-NEXT:    mv a1, a0
11020; ZVFHMIN-NEXT:    slli a0, a0, 1
11021; ZVFHMIN-NEXT:    add a0, a0, a1
11022; ZVFHMIN-NEXT:    add sp, sp, a0
11023; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
11024; ZVFHMIN-NEXT:    addi sp, sp, 16
11025; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
11026; ZVFHMIN-NEXT:    ret
11027  %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl)
11028  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl)
11029  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
11030  ret <vscale x 32 x half> %v
11031}
11032
11033define <vscale x 32 x half> @vfnmsub_vv_nxv32f16_commuted(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
11034; ZVFH-LABEL: vfnmsub_vv_nxv32f16_commuted:
11035; ZVFH:       # %bb.0:
11036; ZVFH-NEXT:    vl8re16.v v24, (a0)
11037; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11038; ZVFH-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
11039; ZVFH-NEXT:    ret
11040;
11041; ZVFHMIN-LABEL: vfnmsub_vv_nxv32f16_commuted:
11042; ZVFHMIN:       # %bb.0:
11043; ZVFHMIN-NEXT:    addi sp, sp, -16
11044; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
11045; ZVFHMIN-NEXT:    csrr a2, vlenb
11046; ZVFHMIN-NEXT:    slli a2, a2, 4
11047; ZVFHMIN-NEXT:    mv a3, a2
11048; ZVFHMIN-NEXT:    slli a2, a2, 1
11049; ZVFHMIN-NEXT:    add a2, a2, a3
11050; ZVFHMIN-NEXT:    sub sp, sp, a2
11051; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x30, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 48 * vlenb
11052; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11053; ZVFHMIN-NEXT:    vmv1r.v v7, v0
11054; ZVFHMIN-NEXT:    csrr a2, vlenb
11055; ZVFHMIN-NEXT:    slli a2, a2, 3
11056; ZVFHMIN-NEXT:    mv a3, a2
11057; ZVFHMIN-NEXT:    slli a2, a2, 2
11058; ZVFHMIN-NEXT:    add a2, a2, a3
11059; ZVFHMIN-NEXT:    add a2, sp, a2
11060; ZVFHMIN-NEXT:    addi a2, a2, 16
11061; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
11062; ZVFHMIN-NEXT:    vl8re16.v v24, (a0)
11063; ZVFHMIN-NEXT:    lui a2, 8
11064; ZVFHMIN-NEXT:    csrr a3, vlenb
11065; ZVFHMIN-NEXT:    vxor.vx v8, v16, a2, v0.t
11066; ZVFHMIN-NEXT:    csrr a0, vlenb
11067; ZVFHMIN-NEXT:    slli a0, a0, 5
11068; ZVFHMIN-NEXT:    add a0, sp, a0
11069; ZVFHMIN-NEXT:    addi a0, a0, 16
11070; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
11071; ZVFHMIN-NEXT:    slli a0, a3, 1
11072; ZVFHMIN-NEXT:    srli a3, a3, 2
11073; ZVFHMIN-NEXT:    sub a4, a1, a0
11074; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
11075; ZVFHMIN-NEXT:    vslidedown.vx v6, v0, a3
11076; ZVFHMIN-NEXT:    sltu a3, a1, a4
11077; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11078; ZVFHMIN-NEXT:    vxor.vx v24, v24, a2, v0.t
11079; ZVFHMIN-NEXT:    addi a3, a3, -1
11080; ZVFHMIN-NEXT:    and a3, a3, a4
11081; ZVFHMIN-NEXT:    vmv1r.v v0, v6
11082; ZVFHMIN-NEXT:    csrr a2, vlenb
11083; ZVFHMIN-NEXT:    slli a2, a2, 3
11084; ZVFHMIN-NEXT:    mv a4, a2
11085; ZVFHMIN-NEXT:    slli a2, a2, 1
11086; ZVFHMIN-NEXT:    add a2, a2, a4
11087; ZVFHMIN-NEXT:    add a2, sp, a2
11088; ZVFHMIN-NEXT:    addi a2, a2, 16
11089; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
11090; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11091; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
11092; ZVFHMIN-NEXT:    csrr a2, vlenb
11093; ZVFHMIN-NEXT:    slli a2, a2, 4
11094; ZVFHMIN-NEXT:    add a2, sp, a2
11095; ZVFHMIN-NEXT:    addi a2, a2, 16
11096; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
11097; ZVFHMIN-NEXT:    csrr a2, vlenb
11098; ZVFHMIN-NEXT:    slli a2, a2, 5
11099; ZVFHMIN-NEXT:    add a2, sp, a2
11100; ZVFHMIN-NEXT:    addi a2, a2, 16
11101; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11102; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
11103; ZVFHMIN-NEXT:    csrr a2, vlenb
11104; ZVFHMIN-NEXT:    slli a2, a2, 3
11105; ZVFHMIN-NEXT:    add a2, sp, a2
11106; ZVFHMIN-NEXT:    addi a2, a2, 16
11107; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
11108; ZVFHMIN-NEXT:    csrr a2, vlenb
11109; ZVFHMIN-NEXT:    slli a2, a2, 3
11110; ZVFHMIN-NEXT:    mv a3, a2
11111; ZVFHMIN-NEXT:    slli a2, a2, 2
11112; ZVFHMIN-NEXT:    add a2, a2, a3
11113; ZVFHMIN-NEXT:    add a2, sp, a2
11114; ZVFHMIN-NEXT:    addi a2, a2, 16
11115; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11116; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
11117; ZVFHMIN-NEXT:    addi a2, sp, 16
11118; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
11119; ZVFHMIN-NEXT:    csrr a2, vlenb
11120; ZVFHMIN-NEXT:    slli a2, a2, 4
11121; ZVFHMIN-NEXT:    add a2, sp, a2
11122; ZVFHMIN-NEXT:    addi a2, a2, 16
11123; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11124; ZVFHMIN-NEXT:    csrr a2, vlenb
11125; ZVFHMIN-NEXT:    slli a2, a2, 3
11126; ZVFHMIN-NEXT:    add a2, sp, a2
11127; ZVFHMIN-NEXT:    addi a2, a2, 16
11128; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
11129; ZVFHMIN-NEXT:    addi a2, sp, 16
11130; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
11131; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11132; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
11133; ZVFHMIN-NEXT:    vmv.v.v v8, v16
11134; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11135; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v8, v0.t
11136; ZVFHMIN-NEXT:    csrr a2, vlenb
11137; ZVFHMIN-NEXT:    slli a2, a2, 3
11138; ZVFHMIN-NEXT:    add a2, sp, a2
11139; ZVFHMIN-NEXT:    addi a2, a2, 16
11140; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
11141; ZVFHMIN-NEXT:    bltu a1, a0, .LBB299_2
11142; ZVFHMIN-NEXT:  # %bb.1:
11143; ZVFHMIN-NEXT:    mv a1, a0
11144; ZVFHMIN-NEXT:  .LBB299_2:
11145; ZVFHMIN-NEXT:    vmv1r.v v0, v7
11146; ZVFHMIN-NEXT:    csrr a0, vlenb
11147; ZVFHMIN-NEXT:    slli a0, a0, 5
11148; ZVFHMIN-NEXT:    add a0, sp, a0
11149; ZVFHMIN-NEXT:    addi a0, a0, 16
11150; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
11151; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
11152; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
11153; ZVFHMIN-NEXT:    csrr a0, vlenb
11154; ZVFHMIN-NEXT:    slli a0, a0, 4
11155; ZVFHMIN-NEXT:    add a0, sp, a0
11156; ZVFHMIN-NEXT:    addi a0, a0, 16
11157; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
11158; ZVFHMIN-NEXT:    csrr a0, vlenb
11159; ZVFHMIN-NEXT:    slli a0, a0, 3
11160; ZVFHMIN-NEXT:    mv a1, a0
11161; ZVFHMIN-NEXT:    slli a0, a0, 1
11162; ZVFHMIN-NEXT:    add a0, a0, a1
11163; ZVFHMIN-NEXT:    add a0, sp, a0
11164; ZVFHMIN-NEXT:    addi a0, a0, 16
11165; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
11166; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
11167; ZVFHMIN-NEXT:    csrr a0, vlenb
11168; ZVFHMIN-NEXT:    slli a0, a0, 5
11169; ZVFHMIN-NEXT:    add a0, sp, a0
11170; ZVFHMIN-NEXT:    addi a0, a0, 16
11171; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
11172; ZVFHMIN-NEXT:    csrr a0, vlenb
11173; ZVFHMIN-NEXT:    slli a0, a0, 3
11174; ZVFHMIN-NEXT:    mv a1, a0
11175; ZVFHMIN-NEXT:    slli a0, a0, 2
11176; ZVFHMIN-NEXT:    add a0, a0, a1
11177; ZVFHMIN-NEXT:    add a0, sp, a0
11178; ZVFHMIN-NEXT:    addi a0, a0, 16
11179; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
11180; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
11181; ZVFHMIN-NEXT:    csrr a0, vlenb
11182; ZVFHMIN-NEXT:    slli a0, a0, 4
11183; ZVFHMIN-NEXT:    add a0, sp, a0
11184; ZVFHMIN-NEXT:    addi a0, a0, 16
11185; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
11186; ZVFHMIN-NEXT:    csrr a0, vlenb
11187; ZVFHMIN-NEXT:    slli a0, a0, 5
11188; ZVFHMIN-NEXT:    add a0, sp, a0
11189; ZVFHMIN-NEXT:    addi a0, a0, 16
11190; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11191; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11192; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
11193; ZVFHMIN-NEXT:    vmv.v.v v16, v8
11194; ZVFHMIN-NEXT:    csrr a0, vlenb
11195; ZVFHMIN-NEXT:    slli a0, a0, 3
11196; ZVFHMIN-NEXT:    add a0, sp, a0
11197; ZVFHMIN-NEXT:    addi a0, a0, 16
11198; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
11199; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11200; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
11201; ZVFHMIN-NEXT:    csrr a0, vlenb
11202; ZVFHMIN-NEXT:    slli a0, a0, 4
11203; ZVFHMIN-NEXT:    mv a1, a0
11204; ZVFHMIN-NEXT:    slli a0, a0, 1
11205; ZVFHMIN-NEXT:    add a0, a0, a1
11206; ZVFHMIN-NEXT:    add sp, sp, a0
11207; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
11208; ZVFHMIN-NEXT:    addi sp, sp, 16
11209; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
11210; ZVFHMIN-NEXT:    ret
11211  %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl)
11212  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl)
11213  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
11214  ret <vscale x 32 x half> %v
11215}
11216
11217define <vscale x 32 x half> @vfnmsub_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) {
11218; ZVFH-LABEL: vfnmsub_vv_nxv32f16_unmasked:
11219; ZVFH:       # %bb.0:
11220; ZVFH-NEXT:    vl8re16.v v24, (a0)
11221; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11222; ZVFH-NEXT:    vfnmadd.vv v8, v16, v24
11223; ZVFH-NEXT:    ret
11224;
11225; ZVFHMIN-LABEL: vfnmsub_vv_nxv32f16_unmasked:
11226; ZVFHMIN:       # %bb.0:
11227; ZVFHMIN-NEXT:    addi sp, sp, -16
11228; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
11229; ZVFHMIN-NEXT:    csrr a2, vlenb
11230; ZVFHMIN-NEXT:    slli a2, a2, 5
11231; ZVFHMIN-NEXT:    sub sp, sp, a2
11232; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
11233; ZVFHMIN-NEXT:    csrr a2, vlenb
11234; ZVFHMIN-NEXT:    slli a2, a2, 3
11235; ZVFHMIN-NEXT:    mv a3, a2
11236; ZVFHMIN-NEXT:    slli a2, a2, 1
11237; ZVFHMIN-NEXT:    add a2, a2, a3
11238; ZVFHMIN-NEXT:    add a2, sp, a2
11239; ZVFHMIN-NEXT:    addi a2, a2, 16
11240; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
11241; ZVFHMIN-NEXT:    vl8re16.v v24, (a0)
11242; ZVFHMIN-NEXT:    lui a2, 8
11243; ZVFHMIN-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
11244; ZVFHMIN-NEXT:    vmset.m v8
11245; ZVFHMIN-NEXT:    csrr a3, vlenb
11246; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11247; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2
11248; ZVFHMIN-NEXT:    slli a0, a3, 1
11249; ZVFHMIN-NEXT:    srli a3, a3, 2
11250; ZVFHMIN-NEXT:    sub a4, a1, a0
11251; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
11252; ZVFHMIN-NEXT:    vslidedown.vx v0, v8, a3
11253; ZVFHMIN-NEXT:    sltu a3, a1, a4
11254; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11255; ZVFHMIN-NEXT:    vxor.vx v8, v24, a2
11256; ZVFHMIN-NEXT:    addi a3, a3, -1
11257; ZVFHMIN-NEXT:    and a3, a3, a4
11258; ZVFHMIN-NEXT:    csrr a2, vlenb
11259; ZVFHMIN-NEXT:    slli a2, a2, 3
11260; ZVFHMIN-NEXT:    add a2, sp, a2
11261; ZVFHMIN-NEXT:    addi a2, a2, 16
11262; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
11263; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11264; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
11265; ZVFHMIN-NEXT:    addi a2, sp, 16
11266; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
11267; ZVFHMIN-NEXT:    csrr a2, vlenb
11268; ZVFHMIN-NEXT:    slli a2, a2, 4
11269; ZVFHMIN-NEXT:    add a2, sp, a2
11270; ZVFHMIN-NEXT:    addi a2, a2, 16
11271; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
11272; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
11273; ZVFHMIN-NEXT:    csrr a2, vlenb
11274; ZVFHMIN-NEXT:    slli a2, a2, 3
11275; ZVFHMIN-NEXT:    mv a3, a2
11276; ZVFHMIN-NEXT:    slli a2, a2, 1
11277; ZVFHMIN-NEXT:    add a2, a2, a3
11278; ZVFHMIN-NEXT:    add a2, sp, a2
11279; ZVFHMIN-NEXT:    addi a2, a2, 16
11280; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
11281; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
11282; ZVFHMIN-NEXT:    addi a2, sp, 16
11283; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
11284; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11285; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
11286; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11287; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
11288; ZVFHMIN-NEXT:    bltu a1, a0, .LBB300_2
11289; ZVFHMIN-NEXT:  # %bb.1:
11290; ZVFHMIN-NEXT:    mv a1, a0
11291; ZVFHMIN-NEXT:  .LBB300_2:
11292; ZVFHMIN-NEXT:    csrr a0, vlenb
11293; ZVFHMIN-NEXT:    slli a0, a0, 4
11294; ZVFHMIN-NEXT:    add a0, sp, a0
11295; ZVFHMIN-NEXT:    addi a0, a0, 16
11296; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11297; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
11298; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
11299; ZVFHMIN-NEXT:    addi a0, sp, 16
11300; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
11301; ZVFHMIN-NEXT:    csrr a0, vlenb
11302; ZVFHMIN-NEXT:    slli a0, a0, 3
11303; ZVFHMIN-NEXT:    add a0, sp, a0
11304; ZVFHMIN-NEXT:    addi a0, a0, 16
11305; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11306; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
11307; ZVFHMIN-NEXT:    csrr a0, vlenb
11308; ZVFHMIN-NEXT:    slli a0, a0, 3
11309; ZVFHMIN-NEXT:    mv a1, a0
11310; ZVFHMIN-NEXT:    slli a0, a0, 1
11311; ZVFHMIN-NEXT:    add a0, a0, a1
11312; ZVFHMIN-NEXT:    add a0, sp, a0
11313; ZVFHMIN-NEXT:    addi a0, a0, 16
11314; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
11315; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
11316; ZVFHMIN-NEXT:    addi a0, sp, 16
11317; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
11318; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11319; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v0
11320; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11321; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
11322; ZVFHMIN-NEXT:    csrr a0, vlenb
11323; ZVFHMIN-NEXT:    slli a0, a0, 5
11324; ZVFHMIN-NEXT:    add sp, sp, a0
11325; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
11326; ZVFHMIN-NEXT:    addi sp, sp, 16
11327; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
11328; ZVFHMIN-NEXT:    ret
11329  %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11330  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11331  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11332  ret <vscale x 32 x half> %v
11333}
11334
11335define <vscale x 32 x half> @vfnmsub_vv_nxv32f16_unmasked_commuted(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) {
11336; ZVFH-LABEL: vfnmsub_vv_nxv32f16_unmasked_commuted:
11337; ZVFH:       # %bb.0:
11338; ZVFH-NEXT:    vl8re16.v v24, (a0)
11339; ZVFH-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11340; ZVFH-NEXT:    vfnmadd.vv v8, v16, v24
11341; ZVFH-NEXT:    ret
11342;
11343; ZVFHMIN-LABEL: vfnmsub_vv_nxv32f16_unmasked_commuted:
11344; ZVFHMIN:       # %bb.0:
11345; ZVFHMIN-NEXT:    addi sp, sp, -16
11346; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
11347; ZVFHMIN-NEXT:    csrr a2, vlenb
11348; ZVFHMIN-NEXT:    slli a2, a2, 5
11349; ZVFHMIN-NEXT:    sub sp, sp, a2
11350; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
11351; ZVFHMIN-NEXT:    csrr a2, vlenb
11352; ZVFHMIN-NEXT:    slli a2, a2, 3
11353; ZVFHMIN-NEXT:    mv a3, a2
11354; ZVFHMIN-NEXT:    slli a2, a2, 1
11355; ZVFHMIN-NEXT:    add a2, a2, a3
11356; ZVFHMIN-NEXT:    add a2, sp, a2
11357; ZVFHMIN-NEXT:    addi a2, a2, 16
11358; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
11359; ZVFHMIN-NEXT:    vl8re16.v v24, (a0)
11360; ZVFHMIN-NEXT:    lui a2, 8
11361; ZVFHMIN-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
11362; ZVFHMIN-NEXT:    vmset.m v7
11363; ZVFHMIN-NEXT:    csrr a3, vlenb
11364; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11365; ZVFHMIN-NEXT:    vxor.vx v8, v16, a2
11366; ZVFHMIN-NEXT:    slli a0, a3, 1
11367; ZVFHMIN-NEXT:    srli a3, a3, 2
11368; ZVFHMIN-NEXT:    sub a4, a1, a0
11369; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
11370; ZVFHMIN-NEXT:    vslidedown.vx v0, v7, a3
11371; ZVFHMIN-NEXT:    sltu a3, a1, a4
11372; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
11373; ZVFHMIN-NEXT:    vxor.vx v24, v24, a2
11374; ZVFHMIN-NEXT:    addi a3, a3, -1
11375; ZVFHMIN-NEXT:    and a3, a3, a4
11376; ZVFHMIN-NEXT:    csrr a2, vlenb
11377; ZVFHMIN-NEXT:    slli a2, a2, 3
11378; ZVFHMIN-NEXT:    add a2, sp, a2
11379; ZVFHMIN-NEXT:    addi a2, a2, 16
11380; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
11381; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11382; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
11383; ZVFHMIN-NEXT:    addi a2, sp, 16
11384; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
11385; ZVFHMIN-NEXT:    vmv4r.v v16, v8
11386; ZVFHMIN-NEXT:    csrr a2, vlenb
11387; ZVFHMIN-NEXT:    slli a2, a2, 4
11388; ZVFHMIN-NEXT:    add a2, sp, a2
11389; ZVFHMIN-NEXT:    addi a2, a2, 16
11390; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
11391; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
11392; ZVFHMIN-NEXT:    csrr a2, vlenb
11393; ZVFHMIN-NEXT:    slli a2, a2, 3
11394; ZVFHMIN-NEXT:    mv a3, a2
11395; ZVFHMIN-NEXT:    slli a2, a2, 1
11396; ZVFHMIN-NEXT:    add a2, a2, a3
11397; ZVFHMIN-NEXT:    add a2, sp, a2
11398; ZVFHMIN-NEXT:    addi a2, a2, 16
11399; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11400; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
11401; ZVFHMIN-NEXT:    addi a2, sp, 16
11402; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11403; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11404; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
11405; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11406; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
11407; ZVFHMIN-NEXT:    bltu a1, a0, .LBB301_2
11408; ZVFHMIN-NEXT:  # %bb.1:
11409; ZVFHMIN-NEXT:    mv a1, a0
11410; ZVFHMIN-NEXT:  .LBB301_2:
11411; ZVFHMIN-NEXT:    csrr a0, vlenb
11412; ZVFHMIN-NEXT:    slli a0, a0, 4
11413; ZVFHMIN-NEXT:    add a0, sp, a0
11414; ZVFHMIN-NEXT:    addi a0, a0, 16
11415; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11416; ZVFHMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
11417; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
11418; ZVFHMIN-NEXT:    addi a0, sp, 16
11419; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
11420; ZVFHMIN-NEXT:    csrr a0, vlenb
11421; ZVFHMIN-NEXT:    slli a0, a0, 3
11422; ZVFHMIN-NEXT:    add a0, sp, a0
11423; ZVFHMIN-NEXT:    addi a0, a0, 16
11424; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11425; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
11426; ZVFHMIN-NEXT:    csrr a0, vlenb
11427; ZVFHMIN-NEXT:    slli a0, a0, 3
11428; ZVFHMIN-NEXT:    mv a1, a0
11429; ZVFHMIN-NEXT:    slli a0, a0, 1
11430; ZVFHMIN-NEXT:    add a0, a0, a1
11431; ZVFHMIN-NEXT:    add a0, sp, a0
11432; ZVFHMIN-NEXT:    addi a0, a0, 16
11433; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11434; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
11435; ZVFHMIN-NEXT:    addi a0, sp, 16
11436; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11437; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11438; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
11439; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11440; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
11441; ZVFHMIN-NEXT:    csrr a0, vlenb
11442; ZVFHMIN-NEXT:    slli a0, a0, 5
11443; ZVFHMIN-NEXT:    add sp, sp, a0
11444; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
11445; ZVFHMIN-NEXT:    addi sp, sp, 16
11446; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
11447; ZVFHMIN-NEXT:    ret
11448  %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11449  %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11450  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11451  ret <vscale x 32 x half> %v
11452}
11453
11454define <vscale x 32 x half> @vfnmsub_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
11455; ZVFH-LABEL: vfnmsub_vf_nxv32f16:
11456; ZVFH:       # %bb.0:
11457; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11458; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
11459; ZVFH-NEXT:    ret
11460;
11461; ZVFHMIN-LABEL: vfnmsub_vf_nxv32f16:
11462; ZVFHMIN:       # %bb.0:
11463; ZVFHMIN-NEXT:    addi sp, sp, -16
11464; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
11465; ZVFHMIN-NEXT:    csrr a1, vlenb
11466; ZVFHMIN-NEXT:    slli a1, a1, 3
11467; ZVFHMIN-NEXT:    mv a2, a1
11468; ZVFHMIN-NEXT:    slli a1, a1, 2
11469; ZVFHMIN-NEXT:    add a1, a1, a2
11470; ZVFHMIN-NEXT:    sub sp, sp, a1
11471; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
11472; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11473; ZVFHMIN-NEXT:    vmv1r.v v7, v0
11474; ZVFHMIN-NEXT:    vmv8r.v v24, v16
11475; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
11476; ZVFHMIN-NEXT:    lui a1, 8
11477; ZVFHMIN-NEXT:    csrr a3, vlenb
11478; ZVFHMIN-NEXT:    vxor.vx v16, v8, a1, v0.t
11479; ZVFHMIN-NEXT:    slli a1, a3, 1
11480; ZVFHMIN-NEXT:    srli a3, a3, 2
11481; ZVFHMIN-NEXT:    sub a4, a0, a1
11482; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
11483; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
11484; ZVFHMIN-NEXT:    sltu a3, a0, a4
11485; ZVFHMIN-NEXT:    addi a3, a3, -1
11486; ZVFHMIN-NEXT:    and a3, a3, a4
11487; ZVFHMIN-NEXT:    csrr a4, vlenb
11488; ZVFHMIN-NEXT:    slli a4, a4, 4
11489; ZVFHMIN-NEXT:    add a4, sp, a4
11490; ZVFHMIN-NEXT:    addi a4, a4, 16
11491; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
11492; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11493; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
11494; ZVFHMIN-NEXT:    csrr a4, vlenb
11495; ZVFHMIN-NEXT:    slli a4, a4, 3
11496; ZVFHMIN-NEXT:    add a4, sp, a4
11497; ZVFHMIN-NEXT:    addi a4, a4, 16
11498; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
11499; ZVFHMIN-NEXT:    csrr a4, vlenb
11500; ZVFHMIN-NEXT:    slli a4, a4, 3
11501; ZVFHMIN-NEXT:    mv a5, a4
11502; ZVFHMIN-NEXT:    slli a4, a4, 1
11503; ZVFHMIN-NEXT:    add a4, a4, a5
11504; ZVFHMIN-NEXT:    add a4, sp, a4
11505; ZVFHMIN-NEXT:    addi a4, a4, 16
11506; ZVFHMIN-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
11507; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
11508; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
11509; ZVFHMIN-NEXT:    vmv.v.x v24, a2
11510; ZVFHMIN-NEXT:    csrr a2, vlenb
11511; ZVFHMIN-NEXT:    slli a2, a2, 5
11512; ZVFHMIN-NEXT:    add a2, sp, a2
11513; ZVFHMIN-NEXT:    addi a2, a2, 16
11514; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
11515; ZVFHMIN-NEXT:    csrr a2, vlenb
11516; ZVFHMIN-NEXT:    slli a2, a2, 5
11517; ZVFHMIN-NEXT:    add a2, sp, a2
11518; ZVFHMIN-NEXT:    addi a2, a2, 16
11519; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11520; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11521; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
11522; ZVFHMIN-NEXT:    csrr a2, vlenb
11523; ZVFHMIN-NEXT:    slli a2, a2, 3
11524; ZVFHMIN-NEXT:    add a2, sp, a2
11525; ZVFHMIN-NEXT:    addi a2, a2, 16
11526; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11527; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11528; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
11529; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11530; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
11531; ZVFHMIN-NEXT:    addi a2, sp, 16
11532; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
11533; ZVFHMIN-NEXT:    bltu a0, a1, .LBB302_2
11534; ZVFHMIN-NEXT:  # %bb.1:
11535; ZVFHMIN-NEXT:    mv a0, a1
11536; ZVFHMIN-NEXT:  .LBB302_2:
11537; ZVFHMIN-NEXT:    vmv1r.v v0, v7
11538; ZVFHMIN-NEXT:    csrr a1, vlenb
11539; ZVFHMIN-NEXT:    slli a1, a1, 4
11540; ZVFHMIN-NEXT:    add a1, sp, a1
11541; ZVFHMIN-NEXT:    addi a1, a1, 16
11542; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
11543; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
11544; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
11545; ZVFHMIN-NEXT:    csrr a0, vlenb
11546; ZVFHMIN-NEXT:    slli a0, a0, 3
11547; ZVFHMIN-NEXT:    add a0, sp, a0
11548; ZVFHMIN-NEXT:    addi a0, a0, 16
11549; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
11550; ZVFHMIN-NEXT:    csrr a0, vlenb
11551; ZVFHMIN-NEXT:    slli a0, a0, 3
11552; ZVFHMIN-NEXT:    mv a1, a0
11553; ZVFHMIN-NEXT:    slli a0, a0, 1
11554; ZVFHMIN-NEXT:    add a0, a0, a1
11555; ZVFHMIN-NEXT:    add a0, sp, a0
11556; ZVFHMIN-NEXT:    addi a0, a0, 16
11557; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
11558; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
11559; ZVFHMIN-NEXT:    csrr a0, vlenb
11560; ZVFHMIN-NEXT:    slli a0, a0, 4
11561; ZVFHMIN-NEXT:    add a0, sp, a0
11562; ZVFHMIN-NEXT:    addi a0, a0, 16
11563; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
11564; ZVFHMIN-NEXT:    csrr a0, vlenb
11565; ZVFHMIN-NEXT:    slli a0, a0, 5
11566; ZVFHMIN-NEXT:    add a0, sp, a0
11567; ZVFHMIN-NEXT:    addi a0, a0, 16
11568; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
11569; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
11570; ZVFHMIN-NEXT:    csrr a0, vlenb
11571; ZVFHMIN-NEXT:    slli a0, a0, 3
11572; ZVFHMIN-NEXT:    add a0, sp, a0
11573; ZVFHMIN-NEXT:    addi a0, a0, 16
11574; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
11575; ZVFHMIN-NEXT:    csrr a0, vlenb
11576; ZVFHMIN-NEXT:    slli a0, a0, 4
11577; ZVFHMIN-NEXT:    add a0, sp, a0
11578; ZVFHMIN-NEXT:    addi a0, a0, 16
11579; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11580; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11581; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
11582; ZVFHMIN-NEXT:    vmv.v.v v16, v8
11583; ZVFHMIN-NEXT:    addi a0, sp, 16
11584; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
11585; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11586; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
11587; ZVFHMIN-NEXT:    csrr a0, vlenb
11588; ZVFHMIN-NEXT:    slli a0, a0, 3
11589; ZVFHMIN-NEXT:    mv a1, a0
11590; ZVFHMIN-NEXT:    slli a0, a0, 2
11591; ZVFHMIN-NEXT:    add a0, a0, a1
11592; ZVFHMIN-NEXT:    add sp, sp, a0
11593; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
11594; ZVFHMIN-NEXT:    addi sp, sp, 16
11595; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
11596; ZVFHMIN-NEXT:    ret
11597  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
11598  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
11599  %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl)
11600  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
11601  ret <vscale x 32 x half> %v
11602}
11603
11604define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
11605; ZVFH-LABEL: vfnmsub_vf_nxv32f16_commute:
11606; ZVFH:       # %bb.0:
11607; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11608; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
11609; ZVFH-NEXT:    ret
11610;
11611; ZVFHMIN-LABEL: vfnmsub_vf_nxv32f16_commute:
11612; ZVFHMIN:       # %bb.0:
11613; ZVFHMIN-NEXT:    addi sp, sp, -16
11614; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
11615; ZVFHMIN-NEXT:    csrr a1, vlenb
11616; ZVFHMIN-NEXT:    slli a1, a1, 3
11617; ZVFHMIN-NEXT:    mv a2, a1
11618; ZVFHMIN-NEXT:    slli a1, a1, 2
11619; ZVFHMIN-NEXT:    add a1, a1, a2
11620; ZVFHMIN-NEXT:    sub sp, sp, a1
11621; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
11622; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11623; ZVFHMIN-NEXT:    vmv1r.v v7, v0
11624; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
11625; ZVFHMIN-NEXT:    lui a1, 8
11626; ZVFHMIN-NEXT:    csrr a3, vlenb
11627; ZVFHMIN-NEXT:    vxor.vx v8, v8, a1, v0.t
11628; ZVFHMIN-NEXT:    slli a1, a3, 1
11629; ZVFHMIN-NEXT:    srli a3, a3, 2
11630; ZVFHMIN-NEXT:    sub a4, a0, a1
11631; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
11632; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
11633; ZVFHMIN-NEXT:    sltu a3, a0, a4
11634; ZVFHMIN-NEXT:    addi a3, a3, -1
11635; ZVFHMIN-NEXT:    and a3, a3, a4
11636; ZVFHMIN-NEXT:    csrr a4, vlenb
11637; ZVFHMIN-NEXT:    slli a4, a4, 4
11638; ZVFHMIN-NEXT:    add a4, sp, a4
11639; ZVFHMIN-NEXT:    addi a4, a4, 16
11640; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
11641; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11642; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
11643; ZVFHMIN-NEXT:    csrr a4, vlenb
11644; ZVFHMIN-NEXT:    slli a4, a4, 3
11645; ZVFHMIN-NEXT:    mv a5, a4
11646; ZVFHMIN-NEXT:    slli a4, a4, 1
11647; ZVFHMIN-NEXT:    add a4, a4, a5
11648; ZVFHMIN-NEXT:    add a4, sp, a4
11649; ZVFHMIN-NEXT:    addi a4, a4, 16
11650; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
11651; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
11652; ZVFHMIN-NEXT:    csrr a4, vlenb
11653; ZVFHMIN-NEXT:    slli a4, a4, 3
11654; ZVFHMIN-NEXT:    add a4, sp, a4
11655; ZVFHMIN-NEXT:    addi a4, a4, 16
11656; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
11657; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
11658; ZVFHMIN-NEXT:    vmv.v.x v16, a2
11659; ZVFHMIN-NEXT:    csrr a2, vlenb
11660; ZVFHMIN-NEXT:    slli a2, a2, 5
11661; ZVFHMIN-NEXT:    add a2, sp, a2
11662; ZVFHMIN-NEXT:    addi a2, a2, 16
11663; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
11664; ZVFHMIN-NEXT:    csrr a2, vlenb
11665; ZVFHMIN-NEXT:    slli a2, a2, 5
11666; ZVFHMIN-NEXT:    add a2, sp, a2
11667; ZVFHMIN-NEXT:    addi a2, a2, 16
11668; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11669; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11670; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
11671; ZVFHMIN-NEXT:    csrr a2, vlenb
11672; ZVFHMIN-NEXT:    slli a2, a2, 3
11673; ZVFHMIN-NEXT:    add a2, sp, a2
11674; ZVFHMIN-NEXT:    addi a2, a2, 16
11675; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11676; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11677; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
11678; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11679; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
11680; ZVFHMIN-NEXT:    csrr a2, vlenb
11681; ZVFHMIN-NEXT:    slli a2, a2, 3
11682; ZVFHMIN-NEXT:    add a2, sp, a2
11683; ZVFHMIN-NEXT:    addi a2, a2, 16
11684; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
11685; ZVFHMIN-NEXT:    bltu a0, a1, .LBB303_2
11686; ZVFHMIN-NEXT:  # %bb.1:
11687; ZVFHMIN-NEXT:    mv a0, a1
11688; ZVFHMIN-NEXT:  .LBB303_2:
11689; ZVFHMIN-NEXT:    vmv1r.v v0, v7
11690; ZVFHMIN-NEXT:    csrr a1, vlenb
11691; ZVFHMIN-NEXT:    slli a1, a1, 4
11692; ZVFHMIN-NEXT:    add a1, sp, a1
11693; ZVFHMIN-NEXT:    addi a1, a1, 16
11694; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
11695; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
11696; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t
11697; ZVFHMIN-NEXT:    addi a0, sp, 16
11698; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
11699; ZVFHMIN-NEXT:    csrr a0, vlenb
11700; ZVFHMIN-NEXT:    slli a0, a0, 3
11701; ZVFHMIN-NEXT:    mv a1, a0
11702; ZVFHMIN-NEXT:    slli a0, a0, 1
11703; ZVFHMIN-NEXT:    add a0, a0, a1
11704; ZVFHMIN-NEXT:    add a0, sp, a0
11705; ZVFHMIN-NEXT:    addi a0, a0, 16
11706; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11707; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16, v0.t
11708; ZVFHMIN-NEXT:    csrr a0, vlenb
11709; ZVFHMIN-NEXT:    slli a0, a0, 4
11710; ZVFHMIN-NEXT:    add a0, sp, a0
11711; ZVFHMIN-NEXT:    addi a0, a0, 16
11712; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
11713; ZVFHMIN-NEXT:    csrr a0, vlenb
11714; ZVFHMIN-NEXT:    slli a0, a0, 5
11715; ZVFHMIN-NEXT:    add a0, sp, a0
11716; ZVFHMIN-NEXT:    addi a0, a0, 16
11717; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11718; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t
11719; ZVFHMIN-NEXT:    csrr a0, vlenb
11720; ZVFHMIN-NEXT:    slli a0, a0, 4
11721; ZVFHMIN-NEXT:    add a0, sp, a0
11722; ZVFHMIN-NEXT:    addi a0, a0, 16
11723; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11724; ZVFHMIN-NEXT:    addi a0, sp, 16
11725; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
11726; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11727; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
11728; ZVFHMIN-NEXT:    csrr a0, vlenb
11729; ZVFHMIN-NEXT:    slli a0, a0, 3
11730; ZVFHMIN-NEXT:    add a0, sp, a0
11731; ZVFHMIN-NEXT:    addi a0, a0, 16
11732; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
11733; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11734; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24, v0.t
11735; ZVFHMIN-NEXT:    csrr a0, vlenb
11736; ZVFHMIN-NEXT:    slli a0, a0, 3
11737; ZVFHMIN-NEXT:    mv a1, a0
11738; ZVFHMIN-NEXT:    slli a0, a0, 2
11739; ZVFHMIN-NEXT:    add a0, a0, a1
11740; ZVFHMIN-NEXT:    add sp, sp, a0
11741; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
11742; ZVFHMIN-NEXT:    addi sp, sp, 16
11743; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
11744; ZVFHMIN-NEXT:    ret
11745  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
11746  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
11747  %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl)
11748  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
11749  ret <vscale x 32 x half> %v
11750}
11751
11752define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
11753; ZVFH-LABEL: vfnmsub_vf_nxv32f16_unmasked:
11754; ZVFH:       # %bb.0:
11755; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11756; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v16
11757; ZVFH-NEXT:    ret
11758;
11759; ZVFHMIN-LABEL: vfnmsub_vf_nxv32f16_unmasked:
11760; ZVFHMIN:       # %bb.0:
11761; ZVFHMIN-NEXT:    addi sp, sp, -16
11762; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
11763; ZVFHMIN-NEXT:    csrr a1, vlenb
11764; ZVFHMIN-NEXT:    slli a1, a1, 5
11765; ZVFHMIN-NEXT:    sub sp, sp, a1
11766; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
11767; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
11768; ZVFHMIN-NEXT:    lui a1, 8
11769; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
11770; ZVFHMIN-NEXT:    vmset.m v24
11771; ZVFHMIN-NEXT:    csrr a3, vlenb
11772; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11773; ZVFHMIN-NEXT:    vxor.vx v8, v8, a1
11774; ZVFHMIN-NEXT:    slli a1, a3, 1
11775; ZVFHMIN-NEXT:    srli a3, a3, 2
11776; ZVFHMIN-NEXT:    sub a4, a0, a1
11777; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
11778; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
11779; ZVFHMIN-NEXT:    sltu a3, a0, a4
11780; ZVFHMIN-NEXT:    addi a3, a3, -1
11781; ZVFHMIN-NEXT:    and a3, a3, a4
11782; ZVFHMIN-NEXT:    csrr a4, vlenb
11783; ZVFHMIN-NEXT:    slli a4, a4, 3
11784; ZVFHMIN-NEXT:    add a4, sp, a4
11785; ZVFHMIN-NEXT:    addi a4, a4, 16
11786; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
11787; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11788; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
11789; ZVFHMIN-NEXT:    addi a4, sp, 16
11790; ZVFHMIN-NEXT:    vs8r.v v24, (a4) # Unknown-size Folded Spill
11791; ZVFHMIN-NEXT:    csrr a4, vlenb
11792; ZVFHMIN-NEXT:    slli a4, a4, 4
11793; ZVFHMIN-NEXT:    add a4, sp, a4
11794; ZVFHMIN-NEXT:    addi a4, a4, 16
11795; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
11796; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
11797; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
11798; ZVFHMIN-NEXT:    vmv.v.x v16, a2
11799; ZVFHMIN-NEXT:    csrr a2, vlenb
11800; ZVFHMIN-NEXT:    slli a2, a2, 3
11801; ZVFHMIN-NEXT:    mv a4, a2
11802; ZVFHMIN-NEXT:    slli a2, a2, 1
11803; ZVFHMIN-NEXT:    add a2, a2, a4
11804; ZVFHMIN-NEXT:    add a2, sp, a2
11805; ZVFHMIN-NEXT:    addi a2, a2, 16
11806; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
11807; ZVFHMIN-NEXT:    csrr a2, vlenb
11808; ZVFHMIN-NEXT:    slli a2, a2, 3
11809; ZVFHMIN-NEXT:    mv a4, a2
11810; ZVFHMIN-NEXT:    slli a2, a2, 1
11811; ZVFHMIN-NEXT:    add a2, a2, a4
11812; ZVFHMIN-NEXT:    add a2, sp, a2
11813; ZVFHMIN-NEXT:    addi a2, a2, 16
11814; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
11815; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11816; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
11817; ZVFHMIN-NEXT:    addi a2, sp, 16
11818; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
11819; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11820; ZVFHMIN-NEXT:    vfmadd.vv v16, v24, v8, v0.t
11821; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11822; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
11823; ZVFHMIN-NEXT:    bltu a0, a1, .LBB304_2
11824; ZVFHMIN-NEXT:  # %bb.1:
11825; ZVFHMIN-NEXT:    mv a0, a1
11826; ZVFHMIN-NEXT:  .LBB304_2:
11827; ZVFHMIN-NEXT:    csrr a1, vlenb
11828; ZVFHMIN-NEXT:    slli a1, a1, 3
11829; ZVFHMIN-NEXT:    add a1, sp, a1
11830; ZVFHMIN-NEXT:    addi a1, a1, 16
11831; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
11832; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
11833; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
11834; ZVFHMIN-NEXT:    addi a0, sp, 16
11835; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
11836; ZVFHMIN-NEXT:    csrr a0, vlenb
11837; ZVFHMIN-NEXT:    slli a0, a0, 4
11838; ZVFHMIN-NEXT:    add a0, sp, a0
11839; ZVFHMIN-NEXT:    addi a0, a0, 16
11840; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
11841; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
11842; ZVFHMIN-NEXT:    csrr a0, vlenb
11843; ZVFHMIN-NEXT:    slli a0, a0, 3
11844; ZVFHMIN-NEXT:    mv a1, a0
11845; ZVFHMIN-NEXT:    slli a0, a0, 1
11846; ZVFHMIN-NEXT:    add a0, a0, a1
11847; ZVFHMIN-NEXT:    add a0, sp, a0
11848; ZVFHMIN-NEXT:    addi a0, a0, 16
11849; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11850; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
11851; ZVFHMIN-NEXT:    addi a0, sp, 16
11852; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11853; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11854; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
11855; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11856; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
11857; ZVFHMIN-NEXT:    csrr a0, vlenb
11858; ZVFHMIN-NEXT:    slli a0, a0, 5
11859; ZVFHMIN-NEXT:    add sp, sp, a0
11860; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
11861; ZVFHMIN-NEXT:    addi sp, sp, 16
11862; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
11863; ZVFHMIN-NEXT:    ret
11864  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
11865  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
11866  %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11867  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11868  ret <vscale x 32 x half> %v
11869}
11870
11871define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
11872; ZVFH-LABEL: vfnmsub_vf_nxv32f16_unmasked_commute:
11873; ZVFH:       # %bb.0:
11874; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11875; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v16
11876; ZVFH-NEXT:    ret
11877;
11878; ZVFHMIN-LABEL: vfnmsub_vf_nxv32f16_unmasked_commute:
11879; ZVFHMIN:       # %bb.0:
11880; ZVFHMIN-NEXT:    addi sp, sp, -16
11881; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
11882; ZVFHMIN-NEXT:    csrr a1, vlenb
11883; ZVFHMIN-NEXT:    slli a1, a1, 5
11884; ZVFHMIN-NEXT:    sub sp, sp, a1
11885; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
11886; ZVFHMIN-NEXT:    fmv.x.h a2, fa0
11887; ZVFHMIN-NEXT:    lui a1, 8
11888; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
11889; ZVFHMIN-NEXT:    vmset.m v24
11890; ZVFHMIN-NEXT:    csrr a3, vlenb
11891; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11892; ZVFHMIN-NEXT:    vxor.vx v8, v8, a1
11893; ZVFHMIN-NEXT:    slli a1, a3, 1
11894; ZVFHMIN-NEXT:    srli a3, a3, 2
11895; ZVFHMIN-NEXT:    sub a4, a0, a1
11896; ZVFHMIN-NEXT:    vsetvli a5, zero, e8, mf2, ta, ma
11897; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
11898; ZVFHMIN-NEXT:    sltu a3, a0, a4
11899; ZVFHMIN-NEXT:    addi a3, a3, -1
11900; ZVFHMIN-NEXT:    and a3, a3, a4
11901; ZVFHMIN-NEXT:    csrr a4, vlenb
11902; ZVFHMIN-NEXT:    slli a4, a4, 3
11903; ZVFHMIN-NEXT:    add a4, sp, a4
11904; ZVFHMIN-NEXT:    addi a4, a4, 16
11905; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
11906; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11907; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
11908; ZVFHMIN-NEXT:    csrr a4, vlenb
11909; ZVFHMIN-NEXT:    slli a4, a4, 4
11910; ZVFHMIN-NEXT:    add a4, sp, a4
11911; ZVFHMIN-NEXT:    addi a4, a4, 16
11912; ZVFHMIN-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
11913; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
11914; ZVFHMIN-NEXT:    addi a4, sp, 16
11915; ZVFHMIN-NEXT:    vs8r.v v8, (a4) # Unknown-size Folded Spill
11916; ZVFHMIN-NEXT:    vsetvli a4, zero, e16, m8, ta, ma
11917; ZVFHMIN-NEXT:    vmv.v.x v16, a2
11918; ZVFHMIN-NEXT:    csrr a2, vlenb
11919; ZVFHMIN-NEXT:    slli a2, a2, 3
11920; ZVFHMIN-NEXT:    mv a4, a2
11921; ZVFHMIN-NEXT:    slli a2, a2, 1
11922; ZVFHMIN-NEXT:    add a2, a2, a4
11923; ZVFHMIN-NEXT:    add a2, sp, a2
11924; ZVFHMIN-NEXT:    addi a2, a2, 16
11925; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
11926; ZVFHMIN-NEXT:    csrr a2, vlenb
11927; ZVFHMIN-NEXT:    slli a2, a2, 3
11928; ZVFHMIN-NEXT:    mv a4, a2
11929; ZVFHMIN-NEXT:    slli a2, a2, 1
11930; ZVFHMIN-NEXT:    add a2, a2, a4
11931; ZVFHMIN-NEXT:    add a2, sp, a2
11932; ZVFHMIN-NEXT:    addi a2, a2, 16
11933; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11934; ZVFHMIN-NEXT:    vsetvli zero, a3, e16, m4, ta, ma
11935; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
11936; ZVFHMIN-NEXT:    addi a2, sp, 16
11937; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
11938; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11939; ZVFHMIN-NEXT:    vfmadd.vv v24, v16, v8, v0.t
11940; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11941; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
11942; ZVFHMIN-NEXT:    bltu a0, a1, .LBB305_2
11943; ZVFHMIN-NEXT:  # %bb.1:
11944; ZVFHMIN-NEXT:    mv a0, a1
11945; ZVFHMIN-NEXT:  .LBB305_2:
11946; ZVFHMIN-NEXT:    csrr a1, vlenb
11947; ZVFHMIN-NEXT:    slli a1, a1, 3
11948; ZVFHMIN-NEXT:    add a1, sp, a1
11949; ZVFHMIN-NEXT:    addi a1, a1, 16
11950; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
11951; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
11952; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24
11953; ZVFHMIN-NEXT:    addi a0, sp, 16
11954; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
11955; ZVFHMIN-NEXT:    csrr a0, vlenb
11956; ZVFHMIN-NEXT:    slli a0, a0, 4
11957; ZVFHMIN-NEXT:    add a0, sp, a0
11958; ZVFHMIN-NEXT:    addi a0, a0, 16
11959; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
11960; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
11961; ZVFHMIN-NEXT:    csrr a0, vlenb
11962; ZVFHMIN-NEXT:    slli a0, a0, 3
11963; ZVFHMIN-NEXT:    mv a1, a0
11964; ZVFHMIN-NEXT:    slli a0, a0, 1
11965; ZVFHMIN-NEXT:    add a0, a0, a1
11966; ZVFHMIN-NEXT:    add a0, sp, a0
11967; ZVFHMIN-NEXT:    addi a0, a0, 16
11968; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11969; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
11970; ZVFHMIN-NEXT:    addi a0, sp, 16
11971; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
11972; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
11973; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
11974; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
11975; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
11976; ZVFHMIN-NEXT:    csrr a0, vlenb
11977; ZVFHMIN-NEXT:    slli a0, a0, 5
11978; ZVFHMIN-NEXT:    add sp, sp, a0
11979; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
11980; ZVFHMIN-NEXT:    addi sp, sp, 16
11981; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
11982; ZVFHMIN-NEXT:    ret
11983  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
11984  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
11985  %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11986  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
11987  ret <vscale x 32 x half> %v
11988}
11989
11990define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_neg_splat(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
11991; ZVFH-LABEL: vfnmsub_vf_nxv32f16_neg_splat:
11992; ZVFH:       # %bb.0:
11993; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
11994; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
11995; ZVFH-NEXT:    ret
11996;
11997; ZVFHMIN-LABEL: vfnmsub_vf_nxv32f16_neg_splat:
11998; ZVFHMIN:       # %bb.0:
11999; ZVFHMIN-NEXT:    addi sp, sp, -16
12000; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
12001; ZVFHMIN-NEXT:    csrr a1, vlenb
12002; ZVFHMIN-NEXT:    slli a1, a1, 3
12003; ZVFHMIN-NEXT:    mv a2, a1
12004; ZVFHMIN-NEXT:    slli a1, a1, 2
12005; ZVFHMIN-NEXT:    add a1, a1, a2
12006; ZVFHMIN-NEXT:    sub sp, sp, a1
12007; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
12008; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
12009; ZVFHMIN-NEXT:    vmv1r.v v7, v0
12010; ZVFHMIN-NEXT:    csrr a1, vlenb
12011; ZVFHMIN-NEXT:    slli a1, a1, 3
12012; ZVFHMIN-NEXT:    mv a2, a1
12013; ZVFHMIN-NEXT:    slli a1, a1, 1
12014; ZVFHMIN-NEXT:    add a1, a1, a2
12015; ZVFHMIN-NEXT:    add a1, sp, a1
12016; ZVFHMIN-NEXT:    addi a1, a1, 16
12017; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
12018; ZVFHMIN-NEXT:    csrr a1, vlenb
12019; ZVFHMIN-NEXT:    slli a1, a1, 5
12020; ZVFHMIN-NEXT:    add a1, sp, a1
12021; ZVFHMIN-NEXT:    addi a1, a1, 16
12022; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
12023; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
12024; ZVFHMIN-NEXT:    lui a2, 8
12025; ZVFHMIN-NEXT:    csrr a3, vlenb
12026; ZVFHMIN-NEXT:    vmv.v.x v16, a1
12027; ZVFHMIN-NEXT:    slli a1, a3, 1
12028; ZVFHMIN-NEXT:    srli a3, a3, 2
12029; ZVFHMIN-NEXT:    vxor.vx v8, v16, a2, v0.t
12030; ZVFHMIN-NEXT:    sub a2, a0, a1
12031; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
12032; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
12033; ZVFHMIN-NEXT:    sltu a3, a0, a2
12034; ZVFHMIN-NEXT:    addi a3, a3, -1
12035; ZVFHMIN-NEXT:    and a2, a3, a2
12036; ZVFHMIN-NEXT:    csrr a3, vlenb
12037; ZVFHMIN-NEXT:    slli a3, a3, 4
12038; ZVFHMIN-NEXT:    add a3, sp, a3
12039; ZVFHMIN-NEXT:    addi a3, a3, 16
12040; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
12041; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
12042; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
12043; ZVFHMIN-NEXT:    csrr a2, vlenb
12044; ZVFHMIN-NEXT:    slli a2, a2, 3
12045; ZVFHMIN-NEXT:    mv a3, a2
12046; ZVFHMIN-NEXT:    slli a2, a2, 1
12047; ZVFHMIN-NEXT:    add a2, a2, a3
12048; ZVFHMIN-NEXT:    add a2, sp, a2
12049; ZVFHMIN-NEXT:    addi a2, a2, 16
12050; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
12051; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
12052; ZVFHMIN-NEXT:    csrr a2, vlenb
12053; ZVFHMIN-NEXT:    slli a2, a2, 3
12054; ZVFHMIN-NEXT:    add a2, sp, a2
12055; ZVFHMIN-NEXT:    addi a2, a2, 16
12056; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
12057; ZVFHMIN-NEXT:    csrr a2, vlenb
12058; ZVFHMIN-NEXT:    slli a2, a2, 5
12059; ZVFHMIN-NEXT:    add a2, sp, a2
12060; ZVFHMIN-NEXT:    addi a2, a2, 16
12061; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
12062; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
12063; ZVFHMIN-NEXT:    csrr a2, vlenb
12064; ZVFHMIN-NEXT:    slli a2, a2, 3
12065; ZVFHMIN-NEXT:    add a2, sp, a2
12066; ZVFHMIN-NEXT:    addi a2, a2, 16
12067; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
12068; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
12069; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
12070; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
12071; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
12072; ZVFHMIN-NEXT:    csrr a2, vlenb
12073; ZVFHMIN-NEXT:    slli a2, a2, 3
12074; ZVFHMIN-NEXT:    add a2, sp, a2
12075; ZVFHMIN-NEXT:    addi a2, a2, 16
12076; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
12077; ZVFHMIN-NEXT:    bltu a0, a1, .LBB306_2
12078; ZVFHMIN-NEXT:  # %bb.1:
12079; ZVFHMIN-NEXT:    mv a0, a1
12080; ZVFHMIN-NEXT:  .LBB306_2:
12081; ZVFHMIN-NEXT:    vmv1r.v v0, v7
12082; ZVFHMIN-NEXT:    csrr a1, vlenb
12083; ZVFHMIN-NEXT:    slli a1, a1, 4
12084; ZVFHMIN-NEXT:    add a1, sp, a1
12085; ZVFHMIN-NEXT:    addi a1, a1, 16
12086; ZVFHMIN-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
12087; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
12088; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
12089; ZVFHMIN-NEXT:    addi a0, sp, 16
12090; ZVFHMIN-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
12091; ZVFHMIN-NEXT:    csrr a0, vlenb
12092; ZVFHMIN-NEXT:    slli a0, a0, 3
12093; ZVFHMIN-NEXT:    mv a1, a0
12094; ZVFHMIN-NEXT:    slli a0, a0, 1
12095; ZVFHMIN-NEXT:    add a0, a0, a1
12096; ZVFHMIN-NEXT:    add a0, sp, a0
12097; ZVFHMIN-NEXT:    addi a0, a0, 16
12098; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
12099; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24, v0.t
12100; ZVFHMIN-NEXT:    csrr a0, vlenb
12101; ZVFHMIN-NEXT:    slli a0, a0, 4
12102; ZVFHMIN-NEXT:    add a0, sp, a0
12103; ZVFHMIN-NEXT:    addi a0, a0, 16
12104; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
12105; ZVFHMIN-NEXT:    csrr a0, vlenb
12106; ZVFHMIN-NEXT:    slli a0, a0, 5
12107; ZVFHMIN-NEXT:    add a0, sp, a0
12108; ZVFHMIN-NEXT:    addi a0, a0, 16
12109; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
12110; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
12111; ZVFHMIN-NEXT:    csrr a0, vlenb
12112; ZVFHMIN-NEXT:    slli a0, a0, 4
12113; ZVFHMIN-NEXT:    add a0, sp, a0
12114; ZVFHMIN-NEXT:    addi a0, a0, 16
12115; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
12116; ZVFHMIN-NEXT:    addi a0, sp, 16
12117; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
12118; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
12119; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
12120; ZVFHMIN-NEXT:    csrr a0, vlenb
12121; ZVFHMIN-NEXT:    slli a0, a0, 3
12122; ZVFHMIN-NEXT:    add a0, sp, a0
12123; ZVFHMIN-NEXT:    addi a0, a0, 16
12124; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
12125; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
12126; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
12127; ZVFHMIN-NEXT:    csrr a0, vlenb
12128; ZVFHMIN-NEXT:    slli a0, a0, 3
12129; ZVFHMIN-NEXT:    mv a1, a0
12130; ZVFHMIN-NEXT:    slli a0, a0, 2
12131; ZVFHMIN-NEXT:    add a0, a0, a1
12132; ZVFHMIN-NEXT:    add sp, sp, a0
12133; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
12134; ZVFHMIN-NEXT:    addi sp, sp, 16
12135; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
12136; ZVFHMIN-NEXT:    ret
12137  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
12138  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
12139  %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl)
12140  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
12141  ret <vscale x 32 x half> %v
12142}
12143
12144define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_neg_splat_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) {
12145; ZVFH-LABEL: vfnmsub_vf_nxv32f16_neg_splat_commute:
12146; ZVFH:       # %bb.0:
12147; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
12148; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
12149; ZVFH-NEXT:    ret
12150;
12151; ZVFHMIN-LABEL: vfnmsub_vf_nxv32f16_neg_splat_commute:
12152; ZVFHMIN:       # %bb.0:
12153; ZVFHMIN-NEXT:    addi sp, sp, -16
12154; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
12155; ZVFHMIN-NEXT:    csrr a1, vlenb
12156; ZVFHMIN-NEXT:    slli a1, a1, 3
12157; ZVFHMIN-NEXT:    mv a2, a1
12158; ZVFHMIN-NEXT:    slli a1, a1, 2
12159; ZVFHMIN-NEXT:    add a1, a1, a2
12160; ZVFHMIN-NEXT:    sub sp, sp, a1
12161; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
12162; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
12163; ZVFHMIN-NEXT:    vmv1r.v v7, v0
12164; ZVFHMIN-NEXT:    csrr a1, vlenb
12165; ZVFHMIN-NEXT:    slli a1, a1, 5
12166; ZVFHMIN-NEXT:    add a1, sp, a1
12167; ZVFHMIN-NEXT:    addi a1, a1, 16
12168; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
12169; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
12170; ZVFHMIN-NEXT:    lui a2, 8
12171; ZVFHMIN-NEXT:    csrr a3, vlenb
12172; ZVFHMIN-NEXT:    vmv.v.x v16, a1
12173; ZVFHMIN-NEXT:    slli a1, a3, 1
12174; ZVFHMIN-NEXT:    srli a3, a3, 2
12175; ZVFHMIN-NEXT:    vxor.vx v16, v16, a2, v0.t
12176; ZVFHMIN-NEXT:    sub a2, a0, a1
12177; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
12178; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a3
12179; ZVFHMIN-NEXT:    sltu a3, a0, a2
12180; ZVFHMIN-NEXT:    addi a3, a3, -1
12181; ZVFHMIN-NEXT:    and a2, a3, a2
12182; ZVFHMIN-NEXT:    csrr a3, vlenb
12183; ZVFHMIN-NEXT:    slli a3, a3, 4
12184; ZVFHMIN-NEXT:    add a3, sp, a3
12185; ZVFHMIN-NEXT:    addi a3, a3, 16
12186; ZVFHMIN-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
12187; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
12188; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
12189; ZVFHMIN-NEXT:    csrr a2, vlenb
12190; ZVFHMIN-NEXT:    slli a2, a2, 3
12191; ZVFHMIN-NEXT:    add a2, sp, a2
12192; ZVFHMIN-NEXT:    addi a2, a2, 16
12193; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
12194; ZVFHMIN-NEXT:    csrr a2, vlenb
12195; ZVFHMIN-NEXT:    slli a2, a2, 5
12196; ZVFHMIN-NEXT:    add a2, sp, a2
12197; ZVFHMIN-NEXT:    addi a2, a2, 16
12198; ZVFHMIN-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
12199; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28, v0.t
12200; ZVFHMIN-NEXT:    vmv4r.v v24, v8
12201; ZVFHMIN-NEXT:    csrr a2, vlenb
12202; ZVFHMIN-NEXT:    slli a2, a2, 3
12203; ZVFHMIN-NEXT:    mv a3, a2
12204; ZVFHMIN-NEXT:    slli a2, a2, 1
12205; ZVFHMIN-NEXT:    add a2, a2, a3
12206; ZVFHMIN-NEXT:    add a2, sp, a2
12207; ZVFHMIN-NEXT:    addi a2, a2, 16
12208; ZVFHMIN-NEXT:    vs8r.v v24, (a2) # Unknown-size Folded Spill
12209; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
12210; ZVFHMIN-NEXT:    csrr a2, vlenb
12211; ZVFHMIN-NEXT:    slli a2, a2, 3
12212; ZVFHMIN-NEXT:    add a2, sp, a2
12213; ZVFHMIN-NEXT:    addi a2, a2, 16
12214; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
12215; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
12216; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
12217; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
12218; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
12219; ZVFHMIN-NEXT:    addi a2, sp, 16
12220; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
12221; ZVFHMIN-NEXT:    bltu a0, a1, .LBB307_2
12222; ZVFHMIN-NEXT:  # %bb.1:
12223; ZVFHMIN-NEXT:    mv a0, a1
12224; ZVFHMIN-NEXT:  .LBB307_2:
12225; ZVFHMIN-NEXT:    vmv1r.v v0, v7
12226; ZVFHMIN-NEXT:    csrr a1, vlenb
12227; ZVFHMIN-NEXT:    slli a1, a1, 4
12228; ZVFHMIN-NEXT:    add a1, sp, a1
12229; ZVFHMIN-NEXT:    addi a1, a1, 16
12230; ZVFHMIN-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
12231; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
12232; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
12233; ZVFHMIN-NEXT:    csrr a0, vlenb
12234; ZVFHMIN-NEXT:    slli a0, a0, 3
12235; ZVFHMIN-NEXT:    add a0, sp, a0
12236; ZVFHMIN-NEXT:    addi a0, a0, 16
12237; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
12238; ZVFHMIN-NEXT:    csrr a0, vlenb
12239; ZVFHMIN-NEXT:    slli a0, a0, 5
12240; ZVFHMIN-NEXT:    add a0, sp, a0
12241; ZVFHMIN-NEXT:    addi a0, a0, 16
12242; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
12243; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
12244; ZVFHMIN-NEXT:    csrr a0, vlenb
12245; ZVFHMIN-NEXT:    slli a0, a0, 4
12246; ZVFHMIN-NEXT:    add a0, sp, a0
12247; ZVFHMIN-NEXT:    addi a0, a0, 16
12248; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
12249; ZVFHMIN-NEXT:    csrr a0, vlenb
12250; ZVFHMIN-NEXT:    slli a0, a0, 3
12251; ZVFHMIN-NEXT:    mv a1, a0
12252; ZVFHMIN-NEXT:    slli a0, a0, 1
12253; ZVFHMIN-NEXT:    add a0, a0, a1
12254; ZVFHMIN-NEXT:    add a0, sp, a0
12255; ZVFHMIN-NEXT:    addi a0, a0, 16
12256; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
12257; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t
12258; ZVFHMIN-NEXT:    csrr a0, vlenb
12259; ZVFHMIN-NEXT:    slli a0, a0, 3
12260; ZVFHMIN-NEXT:    add a0, sp, a0
12261; ZVFHMIN-NEXT:    addi a0, a0, 16
12262; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
12263; ZVFHMIN-NEXT:    csrr a0, vlenb
12264; ZVFHMIN-NEXT:    slli a0, a0, 4
12265; ZVFHMIN-NEXT:    add a0, sp, a0
12266; ZVFHMIN-NEXT:    addi a0, a0, 16
12267; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
12268; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
12269; ZVFHMIN-NEXT:    vfmadd.vv v8, v24, v16, v0.t
12270; ZVFHMIN-NEXT:    vmv.v.v v16, v8
12271; ZVFHMIN-NEXT:    addi a0, sp, 16
12272; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
12273; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
12274; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16, v0.t
12275; ZVFHMIN-NEXT:    csrr a0, vlenb
12276; ZVFHMIN-NEXT:    slli a0, a0, 3
12277; ZVFHMIN-NEXT:    mv a1, a0
12278; ZVFHMIN-NEXT:    slli a0, a0, 2
12279; ZVFHMIN-NEXT:    add a0, a0, a1
12280; ZVFHMIN-NEXT:    add sp, sp, a0
12281; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
12282; ZVFHMIN-NEXT:    addi sp, sp, 16
12283; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
12284; ZVFHMIN-NEXT:    ret
12285  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
12286  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
12287  %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl)
12288  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
12289  ret <vscale x 32 x half> %v
12290}
12291
12292define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_neg_splat_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
12293; ZVFH-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked:
12294; ZVFH:       # %bb.0:
12295; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
12296; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v16
12297; ZVFH-NEXT:    ret
12298;
12299; ZVFHMIN-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked:
12300; ZVFHMIN:       # %bb.0:
12301; ZVFHMIN-NEXT:    addi sp, sp, -16
12302; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
12303; ZVFHMIN-NEXT:    csrr a1, vlenb
12304; ZVFHMIN-NEXT:    slli a1, a1, 5
12305; ZVFHMIN-NEXT:    sub sp, sp, a1
12306; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
12307; ZVFHMIN-NEXT:    csrr a1, vlenb
12308; ZVFHMIN-NEXT:    slli a1, a1, 3
12309; ZVFHMIN-NEXT:    mv a2, a1
12310; ZVFHMIN-NEXT:    slli a1, a1, 1
12311; ZVFHMIN-NEXT:    add a1, a1, a2
12312; ZVFHMIN-NEXT:    add a1, sp, a1
12313; ZVFHMIN-NEXT:    addi a1, a1, 16
12314; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
12315; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
12316; ZVFHMIN-NEXT:    lui a2, 8
12317; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
12318; ZVFHMIN-NEXT:    vmset.m v24
12319; ZVFHMIN-NEXT:    csrr a3, vlenb
12320; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
12321; ZVFHMIN-NEXT:    vmv.v.x v8, a1
12322; ZVFHMIN-NEXT:    slli a1, a3, 1
12323; ZVFHMIN-NEXT:    srli a3, a3, 2
12324; ZVFHMIN-NEXT:    vxor.vx v8, v8, a2
12325; ZVFHMIN-NEXT:    sub a2, a0, a1
12326; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
12327; ZVFHMIN-NEXT:    vslidedown.vx v0, v24, a3
12328; ZVFHMIN-NEXT:    sltu a3, a0, a2
12329; ZVFHMIN-NEXT:    addi a3, a3, -1
12330; ZVFHMIN-NEXT:    and a2, a3, a2
12331; ZVFHMIN-NEXT:    csrr a3, vlenb
12332; ZVFHMIN-NEXT:    slli a3, a3, 3
12333; ZVFHMIN-NEXT:    add a3, sp, a3
12334; ZVFHMIN-NEXT:    addi a3, a3, 16
12335; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
12336; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
12337; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
12338; ZVFHMIN-NEXT:    vmv4r.v v8, v16
12339; ZVFHMIN-NEXT:    csrr a2, vlenb
12340; ZVFHMIN-NEXT:    slli a2, a2, 4
12341; ZVFHMIN-NEXT:    add a2, sp, a2
12342; ZVFHMIN-NEXT:    addi a2, a2, 16
12343; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
12344; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
12345; ZVFHMIN-NEXT:    addi a2, sp, 16
12346; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
12347; ZVFHMIN-NEXT:    csrr a2, vlenb
12348; ZVFHMIN-NEXT:    slli a2, a2, 3
12349; ZVFHMIN-NEXT:    mv a3, a2
12350; ZVFHMIN-NEXT:    slli a2, a2, 1
12351; ZVFHMIN-NEXT:    add a2, a2, a3
12352; ZVFHMIN-NEXT:    add a2, sp, a2
12353; ZVFHMIN-NEXT:    addi a2, a2, 16
12354; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
12355; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t
12356; ZVFHMIN-NEXT:    addi a2, sp, 16
12357; ZVFHMIN-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
12358; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
12359; ZVFHMIN-NEXT:    vfmadd.vv v24, v8, v16, v0.t
12360; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
12361; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24, v0.t
12362; ZVFHMIN-NEXT:    bltu a0, a1, .LBB308_2
12363; ZVFHMIN-NEXT:  # %bb.1:
12364; ZVFHMIN-NEXT:    mv a0, a1
12365; ZVFHMIN-NEXT:  .LBB308_2:
12366; ZVFHMIN-NEXT:    csrr a1, vlenb
12367; ZVFHMIN-NEXT:    slli a1, a1, 3
12368; ZVFHMIN-NEXT:    add a1, sp, a1
12369; ZVFHMIN-NEXT:    addi a1, a1, 16
12370; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
12371; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
12372; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
12373; ZVFHMIN-NEXT:    addi a0, sp, 16
12374; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
12375; ZVFHMIN-NEXT:    csrr a0, vlenb
12376; ZVFHMIN-NEXT:    slli a0, a0, 4
12377; ZVFHMIN-NEXT:    add a0, sp, a0
12378; ZVFHMIN-NEXT:    addi a0, a0, 16
12379; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
12380; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
12381; ZVFHMIN-NEXT:    csrr a0, vlenb
12382; ZVFHMIN-NEXT:    slli a0, a0, 3
12383; ZVFHMIN-NEXT:    mv a1, a0
12384; ZVFHMIN-NEXT:    slli a0, a0, 1
12385; ZVFHMIN-NEXT:    add a0, a0, a1
12386; ZVFHMIN-NEXT:    add a0, sp, a0
12387; ZVFHMIN-NEXT:    addi a0, a0, 16
12388; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
12389; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
12390; ZVFHMIN-NEXT:    addi a0, sp, 16
12391; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
12392; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
12393; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
12394; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
12395; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
12396; ZVFHMIN-NEXT:    csrr a0, vlenb
12397; ZVFHMIN-NEXT:    slli a0, a0, 5
12398; ZVFHMIN-NEXT:    add sp, sp, a0
12399; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
12400; ZVFHMIN-NEXT:    addi sp, sp, 16
12401; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
12402; ZVFHMIN-NEXT:    ret
12403  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
12404  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
12405  %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
12406  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
12407  ret <vscale x 32 x half> %v
12408}
12409
12410define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_neg_splat_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) {
12411; ZVFH-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked_commute:
12412; ZVFH:       # %bb.0:
12413; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
12414; ZVFH-NEXT:    vfnmsub.vf v8, fa0, v16
12415; ZVFH-NEXT:    ret
12416;
12417; ZVFHMIN-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked_commute:
12418; ZVFHMIN:       # %bb.0:
12419; ZVFHMIN-NEXT:    addi sp, sp, -16
12420; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
12421; ZVFHMIN-NEXT:    csrr a1, vlenb
12422; ZVFHMIN-NEXT:    slli a1, a1, 5
12423; ZVFHMIN-NEXT:    sub sp, sp, a1
12424; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
12425; ZVFHMIN-NEXT:    csrr a1, vlenb
12426; ZVFHMIN-NEXT:    slli a1, a1, 3
12427; ZVFHMIN-NEXT:    mv a2, a1
12428; ZVFHMIN-NEXT:    slli a1, a1, 1
12429; ZVFHMIN-NEXT:    add a1, a1, a2
12430; ZVFHMIN-NEXT:    add a1, sp, a1
12431; ZVFHMIN-NEXT:    addi a1, a1, 16
12432; ZVFHMIN-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
12433; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
12434; ZVFHMIN-NEXT:    lui a2, 8
12435; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, m4, ta, ma
12436; ZVFHMIN-NEXT:    vmset.m v8
12437; ZVFHMIN-NEXT:    csrr a3, vlenb
12438; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
12439; ZVFHMIN-NEXT:    vmv.v.x v24, a1
12440; ZVFHMIN-NEXT:    slli a1, a3, 1
12441; ZVFHMIN-NEXT:    srli a3, a3, 2
12442; ZVFHMIN-NEXT:    vxor.vx v24, v24, a2
12443; ZVFHMIN-NEXT:    sub a2, a0, a1
12444; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
12445; ZVFHMIN-NEXT:    vslidedown.vx v0, v8, a3
12446; ZVFHMIN-NEXT:    sltu a3, a0, a2
12447; ZVFHMIN-NEXT:    addi a3, a3, -1
12448; ZVFHMIN-NEXT:    and a2, a3, a2
12449; ZVFHMIN-NEXT:    vmv4r.v v8, v24
12450; ZVFHMIN-NEXT:    csrr a3, vlenb
12451; ZVFHMIN-NEXT:    slli a3, a3, 3
12452; ZVFHMIN-NEXT:    add a3, sp, a3
12453; ZVFHMIN-NEXT:    addi a3, a3, 16
12454; ZVFHMIN-NEXT:    vs8r.v v8, (a3) # Unknown-size Folded Spill
12455; ZVFHMIN-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
12456; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28, v0.t
12457; ZVFHMIN-NEXT:    addi a2, sp, 16
12458; ZVFHMIN-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
12459; ZVFHMIN-NEXT:    csrr a2, vlenb
12460; ZVFHMIN-NEXT:    slli a2, a2, 4
12461; ZVFHMIN-NEXT:    add a2, sp, a2
12462; ZVFHMIN-NEXT:    addi a2, a2, 16
12463; ZVFHMIN-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
12464; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v20, v0.t
12465; ZVFHMIN-NEXT:    csrr a2, vlenb
12466; ZVFHMIN-NEXT:    slli a2, a2, 3
12467; ZVFHMIN-NEXT:    mv a3, a2
12468; ZVFHMIN-NEXT:    slli a2, a2, 1
12469; ZVFHMIN-NEXT:    add a2, a2, a3
12470; ZVFHMIN-NEXT:    add a2, sp, a2
12471; ZVFHMIN-NEXT:    addi a2, a2, 16
12472; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
12473; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t
12474; ZVFHMIN-NEXT:    addi a2, sp, 16
12475; ZVFHMIN-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
12476; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
12477; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24, v0.t
12478; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
12479; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16, v0.t
12480; ZVFHMIN-NEXT:    bltu a0, a1, .LBB309_2
12481; ZVFHMIN-NEXT:  # %bb.1:
12482; ZVFHMIN-NEXT:    mv a0, a1
12483; ZVFHMIN-NEXT:  .LBB309_2:
12484; ZVFHMIN-NEXT:    csrr a1, vlenb
12485; ZVFHMIN-NEXT:    slli a1, a1, 3
12486; ZVFHMIN-NEXT:    add a1, sp, a1
12487; ZVFHMIN-NEXT:    addi a1, a1, 16
12488; ZVFHMIN-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
12489; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
12490; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16
12491; ZVFHMIN-NEXT:    addi a0, sp, 16
12492; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
12493; ZVFHMIN-NEXT:    csrr a0, vlenb
12494; ZVFHMIN-NEXT:    slli a0, a0, 4
12495; ZVFHMIN-NEXT:    add a0, sp, a0
12496; ZVFHMIN-NEXT:    addi a0, a0, 16
12497; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
12498; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v0
12499; ZVFHMIN-NEXT:    csrr a0, vlenb
12500; ZVFHMIN-NEXT:    slli a0, a0, 3
12501; ZVFHMIN-NEXT:    mv a1, a0
12502; ZVFHMIN-NEXT:    slli a0, a0, 1
12503; ZVFHMIN-NEXT:    add a0, a0, a1
12504; ZVFHMIN-NEXT:    add a0, sp, a0
12505; ZVFHMIN-NEXT:    addi a0, a0, 16
12506; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
12507; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16
12508; ZVFHMIN-NEXT:    addi a0, sp, 16
12509; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
12510; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
12511; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24
12512; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma
12513; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0
12514; ZVFHMIN-NEXT:    csrr a0, vlenb
12515; ZVFHMIN-NEXT:    slli a0, a0, 5
12516; ZVFHMIN-NEXT:    add sp, sp, a0
12517; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
12518; ZVFHMIN-NEXT:    addi sp, sp, 16
12519; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
12520; ZVFHMIN-NEXT:    ret
12521  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
12522  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
12523  %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
12524  %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl)
12525  ret <vscale x 32 x half> %v
12526}
12527
12528declare <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
12529
12530define <vscale x 1 x float> @vfmsub_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12531; CHECK-LABEL: vfmsub_vv_nxv1f32:
12532; CHECK:       # %bb.0:
12533; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12534; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
12535; CHECK-NEXT:    vmv1r.v v8, v9
12536; CHECK-NEXT:    ret
12537  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
12538  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
12539  ret <vscale x 1 x float> %v
12540}
12541
12542define <vscale x 1 x float> @vfmsub_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
12543; CHECK-LABEL: vfmsub_vv_nxv1f32_unmasked:
12544; CHECK:       # %bb.0:
12545; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12546; CHECK-NEXT:    vfmsub.vv v8, v9, v10
12547; CHECK-NEXT:    ret
12548  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12549  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12550  ret <vscale x 1 x float> %v
12551}
12552
12553define <vscale x 1 x float> @vfmsub_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12554; CHECK-LABEL: vfmsub_vf_nxv1f32:
12555; CHECK:       # %bb.0:
12556; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12557; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
12558; CHECK-NEXT:    ret
12559  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12560  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12561  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12562  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
12563  ret <vscale x 1 x float> %v
12564}
12565
12566define <vscale x 1 x float> @vfmsub_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12567; CHECK-LABEL: vfmsub_vf_nxv1f32_commute:
12568; CHECK:       # %bb.0:
12569; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12570; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
12571; CHECK-NEXT:    ret
12572  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12573  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12574  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12575  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
12576  ret <vscale x 1 x float> %v
12577}
12578
12579define <vscale x 1 x float> @vfmsub_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12580; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked:
12581; CHECK:       # %bb.0:
12582; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12583; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
12584; CHECK-NEXT:    ret
12585  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12586  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12587  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12588  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12589  ret <vscale x 1 x float> %v
12590}
12591
12592define <vscale x 1 x float> @vfmsub_vf_nxv1f32_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12593; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked_commute:
12594; CHECK:       # %bb.0:
12595; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12596; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
12597; CHECK-NEXT:    ret
12598  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12599  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12600  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12601  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12602  ret <vscale x 1 x float> %v
12603}
12604
12605define <vscale x 1 x float> @vfnmadd_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12606; CHECK-LABEL: vfnmadd_vv_nxv1f32:
12607; CHECK:       # %bb.0:
12608; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12609; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
12610; CHECK-NEXT:    vmv1r.v v8, v9
12611; CHECK-NEXT:    ret
12612  %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)
12613  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
12614  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
12615  ret <vscale x 1 x float> %v
12616}
12617
12618define <vscale x 1 x float> @vfnmadd_vv_nxv1f32_commuted(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12619; CHECK-LABEL: vfnmadd_vv_nxv1f32_commuted:
12620; CHECK:       # %bb.0:
12621; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12622; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
12623; CHECK-NEXT:    ret
12624  %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)
12625  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
12626  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
12627  ret <vscale x 1 x float> %v
12628}
12629
12630define <vscale x 1 x float> @vfnmadd_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
12631; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked:
12632; CHECK:       # %bb.0:
12633; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12634; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
12635; CHECK-NEXT:    ret
12636  %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12637  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12638  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12639  ret <vscale x 1 x float> %v
12640}
12641
12642define <vscale x 1 x float> @vfnmadd_vv_nxv1f32_unmasked_commuted(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
12643; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked_commuted:
12644; CHECK:       # %bb.0:
12645; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12646; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
12647; CHECK-NEXT:    ret
12648  %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12649  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12650  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12651  ret <vscale x 1 x float> %v
12652}
12653
12654define <vscale x 1 x float> @vfnmadd_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12655; CHECK-LABEL: vfnmadd_vf_nxv1f32:
12656; CHECK:       # %bb.0:
12657; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12658; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
12659; CHECK-NEXT:    ret
12660  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12661  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12662  %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl)
12663  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12664  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
12665  ret <vscale x 1 x float> %v
12666}
12667
12668define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12669; CHECK-LABEL: vfnmadd_vf_nxv1f32_commute:
12670; CHECK:       # %bb.0:
12671; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12672; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
12673; CHECK-NEXT:    ret
12674  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12675  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12676  %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl)
12677  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12678  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
12679  ret <vscale x 1 x float> %v
12680}
12681
12682define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12683; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked:
12684; CHECK:       # %bb.0:
12685; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12686; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
12687; CHECK-NEXT:    ret
12688  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12689  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12690  %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12691  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12692  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12693  ret <vscale x 1 x float> %v
12694}
12695
12696define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12697; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked_commute:
12698; CHECK:       # %bb.0:
12699; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12700; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
12701; CHECK-NEXT:    ret
12702  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12703  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12704  %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12705  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12706  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12707  ret <vscale x 1 x float> %v
12708}
12709
12710define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_neg_splat(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12711; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat:
12712; CHECK:       # %bb.0:
12713; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12714; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
12715; CHECK-NEXT:    ret
12716  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12717  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12718  %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
12719  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12720  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
12721  ret <vscale x 1 x float> %v
12722}
12723
12724define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_neg_splat_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12725; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_commute:
12726; CHECK:       # %bb.0:
12727; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12728; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
12729; CHECK-NEXT:    ret
12730  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12731  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12732  %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
12733  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12734  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
12735  ret <vscale x 1 x float> %v
12736}
12737
12738define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_neg_splat_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12739; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked:
12740; CHECK:       # %bb.0:
12741; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12742; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
12743; CHECK-NEXT:    ret
12744  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12745  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12746  %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12747  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12748  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12749  ret <vscale x 1 x float> %v
12750}
12751
12752define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_neg_splat_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12753; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked_commute:
12754; CHECK:       # %bb.0:
12755; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12756; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
12757; CHECK-NEXT:    ret
12758  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12759  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12760  %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12761  %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12762  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12763  ret <vscale x 1 x float> %v
12764}
12765
12766define <vscale x 1 x float> @vfnmsub_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12767; CHECK-LABEL: vfnmsub_vv_nxv1f32:
12768; CHECK:       # %bb.0:
12769; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12770; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
12771; CHECK-NEXT:    vmv1r.v v8, v9
12772; CHECK-NEXT:    ret
12773  %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)
12774  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
12775  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
12776  ret <vscale x 1 x float> %v
12777}
12778
12779define <vscale x 1 x float> @vfnmsub_vv_nxv1f32_commuted(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12780; CHECK-LABEL: vfnmsub_vv_nxv1f32_commuted:
12781; CHECK:       # %bb.0:
12782; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12783; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
12784; CHECK-NEXT:    ret
12785  %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)
12786  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
12787  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
12788  ret <vscale x 1 x float> %v
12789}
12790
12791define <vscale x 1 x float> @vfnmsub_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
12792; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked:
12793; CHECK:       # %bb.0:
12794; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12795; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
12796; CHECK-NEXT:    ret
12797  %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12798  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12799  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12800  ret <vscale x 1 x float> %v
12801}
12802
12803define <vscale x 1 x float> @vfnmsub_vv_nxv1f32_unmasked_commuted(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
12804; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked_commuted:
12805; CHECK:       # %bb.0:
12806; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12807; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
12808; CHECK-NEXT:    ret
12809  %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12810  %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12811  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12812  ret <vscale x 1 x float> %v
12813}
12814
12815define <vscale x 1 x float> @vfnmsub_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12816; CHECK-LABEL: vfnmsub_vf_nxv1f32:
12817; CHECK:       # %bb.0:
12818; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12819; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
12820; CHECK-NEXT:    ret
12821  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12822  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12823  %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl)
12824  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12825  ret <vscale x 1 x float> %v
12826}
12827
12828define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12829; CHECK-LABEL: vfnmsub_vf_nxv1f32_commute:
12830; CHECK:       # %bb.0:
12831; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12832; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
12833; CHECK-NEXT:    ret
12834  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12835  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12836  %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl)
12837  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12838  ret <vscale x 1 x float> %v
12839}
12840
12841define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12842; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked:
12843; CHECK:       # %bb.0:
12844; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12845; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
12846; CHECK-NEXT:    ret
12847  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12848  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12849  %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12850  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12851  ret <vscale x 1 x float> %v
12852}
12853
12854define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12855; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked_commute:
12856; CHECK:       # %bb.0:
12857; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12858; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
12859; CHECK-NEXT:    ret
12860  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12861  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12862  %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12863  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12864  ret <vscale x 1 x float> %v
12865}
12866
12867define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_neg_splat(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12868; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat:
12869; CHECK:       # %bb.0:
12870; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12871; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
12872; CHECK-NEXT:    ret
12873  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12874  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12875  %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
12876  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12877  ret <vscale x 1 x float> %v
12878}
12879
12880define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_neg_splat_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
12881; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_commute:
12882; CHECK:       # %bb.0:
12883; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12884; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
12885; CHECK-NEXT:    ret
12886  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12887  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12888  %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
12889  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
12890  ret <vscale x 1 x float> %v
12891}
12892
12893define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_neg_splat_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12894; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked:
12895; CHECK:       # %bb.0:
12896; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12897; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
12898; CHECK-NEXT:    ret
12899  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12900  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12901  %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12902  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12903  ret <vscale x 1 x float> %v
12904}
12905
12906define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_neg_splat_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) {
12907; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked_commute:
12908; CHECK:       # %bb.0:
12909; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
12910; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
12911; CHECK-NEXT:    ret
12912  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
12913  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
12914  %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12915  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
12916  ret <vscale x 1 x float> %v
12917}
12918
12919declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
12920
12921define <vscale x 2 x float> @vfmsub_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
12922; CHECK-LABEL: vfmsub_vv_nxv2f32:
12923; CHECK:       # %bb.0:
12924; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
12925; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
12926; CHECK-NEXT:    vmv.v.v v8, v9
12927; CHECK-NEXT:    ret
12928  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
12929  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
12930  ret <vscale x 2 x float> %v
12931}
12932
12933define <vscale x 2 x float> @vfmsub_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
12934; CHECK-LABEL: vfmsub_vv_nxv2f32_unmasked:
12935; CHECK:       # %bb.0:
12936; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
12937; CHECK-NEXT:    vfmsub.vv v8, v9, v10
12938; CHECK-NEXT:    ret
12939  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
12940  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
12941  ret <vscale x 2 x float> %v
12942}
12943
12944define <vscale x 2 x float> @vfmsub_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
12945; CHECK-LABEL: vfmsub_vf_nxv2f32:
12946; CHECK:       # %bb.0:
12947; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
12948; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
12949; CHECK-NEXT:    ret
12950  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
12951  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
12952  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
12953  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
12954  ret <vscale x 2 x float> %v
12955}
12956
12957define <vscale x 2 x float> @vfmsub_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
12958; CHECK-LABEL: vfmsub_vf_nxv2f32_commute:
12959; CHECK:       # %bb.0:
12960; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
12961; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
12962; CHECK-NEXT:    ret
12963  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
12964  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
12965  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
12966  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
12967  ret <vscale x 2 x float> %v
12968}
12969
12970define <vscale x 2 x float> @vfmsub_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
12971; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked:
12972; CHECK:       # %bb.0:
12973; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
12974; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
12975; CHECK-NEXT:    ret
12976  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
12977  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
12978  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
12979  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
12980  ret <vscale x 2 x float> %v
12981}
12982
12983define <vscale x 2 x float> @vfmsub_vf_nxv2f32_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
12984; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked_commute:
12985; CHECK:       # %bb.0:
12986; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
12987; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
12988; CHECK-NEXT:    ret
12989  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
12990  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
12991  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
12992  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
12993  ret <vscale x 2 x float> %v
12994}
12995
12996define <vscale x 2 x float> @vfnmadd_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
12997; CHECK-LABEL: vfnmadd_vv_nxv2f32:
12998; CHECK:       # %bb.0:
12999; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13000; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
13001; CHECK-NEXT:    vmv.v.v v8, v9
13002; CHECK-NEXT:    ret
13003  %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)
13004  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
13005  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
13006  ret <vscale x 2 x float> %v
13007}
13008
13009define <vscale x 2 x float> @vfnmadd_vv_nxv2f32_commuted(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13010; CHECK-LABEL: vfnmadd_vv_nxv2f32_commuted:
13011; CHECK:       # %bb.0:
13012; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13013; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
13014; CHECK-NEXT:    ret
13015  %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)
13016  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
13017  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
13018  ret <vscale x 2 x float> %v
13019}
13020
13021define <vscale x 2 x float> @vfnmadd_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
13022; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked:
13023; CHECK:       # %bb.0:
13024; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13025; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
13026; CHECK-NEXT:    ret
13027  %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13028  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13029  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13030  ret <vscale x 2 x float> %v
13031}
13032
13033define <vscale x 2 x float> @vfnmadd_vv_nxv2f32_unmasked_commuted(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
13034; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked_commuted:
13035; CHECK:       # %bb.0:
13036; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13037; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
13038; CHECK-NEXT:    ret
13039  %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13040  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13041  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13042  ret <vscale x 2 x float> %v
13043}
13044
13045define <vscale x 2 x float> @vfnmadd_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13046; CHECK-LABEL: vfnmadd_vf_nxv2f32:
13047; CHECK:       # %bb.0:
13048; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13049; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
13050; CHECK-NEXT:    ret
13051  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13052  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13053  %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
13054  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
13055  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
13056  ret <vscale x 2 x float> %v
13057}
13058
13059define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13060; CHECK-LABEL: vfnmadd_vf_nxv2f32_commute:
13061; CHECK:       # %bb.0:
13062; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13063; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
13064; CHECK-NEXT:    ret
13065  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13066  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13067  %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
13068  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
13069  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
13070  ret <vscale x 2 x float> %v
13071}
13072
13073define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
13074; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked:
13075; CHECK:       # %bb.0:
13076; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13077; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
13078; CHECK-NEXT:    ret
13079  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13080  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13081  %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13082  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13083  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13084  ret <vscale x 2 x float> %v
13085}
13086
13087define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
13088; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked_commute:
13089; CHECK:       # %bb.0:
13090; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13091; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
13092; CHECK-NEXT:    ret
13093  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13094  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13095  %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13096  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13097  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13098  ret <vscale x 2 x float> %v
13099}
13100
13101define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_neg_splat(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13102; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat:
13103; CHECK:       # %bb.0:
13104; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13105; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
13106; CHECK-NEXT:    ret
13107  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13108  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13109  %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
13110  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
13111  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
13112  ret <vscale x 2 x float> %v
13113}
13114
13115define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_neg_splat_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13116; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_commute:
13117; CHECK:       # %bb.0:
13118; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13119; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
13120; CHECK-NEXT:    ret
13121  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13122  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13123  %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
13124  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
13125  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
13126  ret <vscale x 2 x float> %v
13127}
13128
13129define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_neg_splat_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
13130; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked:
13131; CHECK:       # %bb.0:
13132; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13133; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
13134; CHECK-NEXT:    ret
13135  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13136  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13137  %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13138  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13139  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13140  ret <vscale x 2 x float> %v
13141}
13142
13143define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_neg_splat_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
13144; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked_commute:
13145; CHECK:       # %bb.0:
13146; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13147; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
13148; CHECK-NEXT:    ret
13149  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13150  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13151  %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13152  %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13153  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13154  ret <vscale x 2 x float> %v
13155}
13156
13157define <vscale x 2 x float> @vfnmsub_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13158; CHECK-LABEL: vfnmsub_vv_nxv2f32:
13159; CHECK:       # %bb.0:
13160; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13161; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
13162; CHECK-NEXT:    vmv.v.v v8, v9
13163; CHECK-NEXT:    ret
13164  %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)
13165  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
13166  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
13167  ret <vscale x 2 x float> %v
13168}
13169
13170define <vscale x 2 x float> @vfnmsub_vv_nxv2f32_commuted(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13171; CHECK-LABEL: vfnmsub_vv_nxv2f32_commuted:
13172; CHECK:       # %bb.0:
13173; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13174; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
13175; CHECK-NEXT:    ret
13176  %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)
13177  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
13178  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
13179  ret <vscale x 2 x float> %v
13180}
13181
13182define <vscale x 2 x float> @vfnmsub_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
13183; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked:
13184; CHECK:       # %bb.0:
13185; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13186; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
13187; CHECK-NEXT:    ret
13188  %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13189  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13190  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13191  ret <vscale x 2 x float> %v
13192}
13193
13194define <vscale x 2 x float> @vfnmsub_vv_nxv2f32_unmasked_commuted(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
13195; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked_commuted:
13196; CHECK:       # %bb.0:
13197; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13198; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
13199; CHECK-NEXT:    ret
13200  %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13201  %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13202  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13203  ret <vscale x 2 x float> %v
13204}
13205
13206define <vscale x 2 x float> @vfnmsub_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13207; CHECK-LABEL: vfnmsub_vf_nxv2f32:
13208; CHECK:       # %bb.0:
13209; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13210; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
13211; CHECK-NEXT:    ret
13212  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13213  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13214  %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
13215  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
13216  ret <vscale x 2 x float> %v
13217}
13218
13219define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13220; CHECK-LABEL: vfnmsub_vf_nxv2f32_commute:
13221; CHECK:       # %bb.0:
13222; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13223; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
13224; CHECK-NEXT:    ret
13225  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13226  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13227  %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
13228  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
13229  ret <vscale x 2 x float> %v
13230}
13231
13232define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
13233; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked:
13234; CHECK:       # %bb.0:
13235; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13236; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
13237; CHECK-NEXT:    ret
13238  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13239  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13240  %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13241  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13242  ret <vscale x 2 x float> %v
13243}
13244
13245define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
13246; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked_commute:
13247; CHECK:       # %bb.0:
13248; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13249; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
13250; CHECK-NEXT:    ret
13251  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13252  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13253  %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13254  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13255  ret <vscale x 2 x float> %v
13256}
13257
13258define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_neg_splat(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13259; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat:
13260; CHECK:       # %bb.0:
13261; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13262; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
13263; CHECK-NEXT:    ret
13264  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13265  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13266  %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
13267  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
13268  ret <vscale x 2 x float> %v
13269}
13270
13271define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_neg_splat_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
13272; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_commute:
13273; CHECK:       # %bb.0:
13274; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13275; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
13276; CHECK-NEXT:    ret
13277  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13278  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13279  %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
13280  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
13281  ret <vscale x 2 x float> %v
13282}
13283
13284define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_neg_splat_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
13285; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked:
13286; CHECK:       # %bb.0:
13287; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13288; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
13289; CHECK-NEXT:    ret
13290  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13291  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13292  %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13293  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13294  ret <vscale x 2 x float> %v
13295}
13296
13297define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_neg_splat_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) {
13298; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked_commute:
13299; CHECK:       # %bb.0:
13300; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
13301; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
13302; CHECK-NEXT:    ret
13303  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
13304  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
13305  %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13306  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
13307  ret <vscale x 2 x float> %v
13308}
13309
13310declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
13311
13312define <vscale x 4 x float> @vfmsub_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13313; CHECK-LABEL: vfmsub_vv_nxv4f32:
13314; CHECK:       # %bb.0:
13315; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13316; CHECK-NEXT:    vfmsub.vv v10, v8, v12, v0.t
13317; CHECK-NEXT:    vmv.v.v v8, v10
13318; CHECK-NEXT:    ret
13319  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
13320  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
13321  ret <vscale x 4 x float> %v
13322}
13323
13324define <vscale x 4 x float> @vfmsub_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
13325; CHECK-LABEL: vfmsub_vv_nxv4f32_unmasked:
13326; CHECK:       # %bb.0:
13327; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13328; CHECK-NEXT:    vfmsub.vv v8, v10, v12
13329; CHECK-NEXT:    ret
13330  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13331  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13332  ret <vscale x 4 x float> %v
13333}
13334
13335define <vscale x 4 x float> @vfmsub_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13336; CHECK-LABEL: vfmsub_vf_nxv4f32:
13337; CHECK:       # %bb.0:
13338; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13339; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
13340; CHECK-NEXT:    ret
13341  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13342  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13343  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13344  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
13345  ret <vscale x 4 x float> %v
13346}
13347
13348define <vscale x 4 x float> @vfmsub_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13349; CHECK-LABEL: vfmsub_vf_nxv4f32_commute:
13350; CHECK:       # %bb.0:
13351; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13352; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
13353; CHECK-NEXT:    ret
13354  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13355  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13356  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13357  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
13358  ret <vscale x 4 x float> %v
13359}
13360
13361define <vscale x 4 x float> @vfmsub_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13362; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked:
13363; CHECK:       # %bb.0:
13364; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13365; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
13366; CHECK-NEXT:    ret
13367  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13368  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13369  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13370  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13371  ret <vscale x 4 x float> %v
13372}
13373
13374define <vscale x 4 x float> @vfmsub_vf_nxv4f32_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13375; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked_commute:
13376; CHECK:       # %bb.0:
13377; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13378; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
13379; CHECK-NEXT:    ret
13380  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13381  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13382  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13383  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13384  ret <vscale x 4 x float> %v
13385}
13386
13387define <vscale x 4 x float> @vfnmadd_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13388; CHECK-LABEL: vfnmadd_vv_nxv4f32:
13389; CHECK:       # %bb.0:
13390; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13391; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
13392; CHECK-NEXT:    vmv.v.v v8, v10
13393; CHECK-NEXT:    ret
13394  %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)
13395  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
13396  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
13397  ret <vscale x 4 x float> %v
13398}
13399
13400define <vscale x 4 x float> @vfnmadd_vv_nxv4f32_commuted(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13401; CHECK-LABEL: vfnmadd_vv_nxv4f32_commuted:
13402; CHECK:       # %bb.0:
13403; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13404; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
13405; CHECK-NEXT:    ret
13406  %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)
13407  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
13408  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
13409  ret <vscale x 4 x float> %v
13410}
13411
13412define <vscale x 4 x float> @vfnmadd_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
13413; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked:
13414; CHECK:       # %bb.0:
13415; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13416; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
13417; CHECK-NEXT:    ret
13418  %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13419  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13420  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13421  ret <vscale x 4 x float> %v
13422}
13423
13424define <vscale x 4 x float> @vfnmadd_vv_nxv4f32_unmasked_commuted(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
13425; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked_commuted:
13426; CHECK:       # %bb.0:
13427; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13428; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
13429; CHECK-NEXT:    ret
13430  %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13431  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13432  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13433  ret <vscale x 4 x float> %v
13434}
13435
13436define <vscale x 4 x float> @vfnmadd_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13437; CHECK-LABEL: vfnmadd_vf_nxv4f32:
13438; CHECK:       # %bb.0:
13439; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13440; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
13441; CHECK-NEXT:    ret
13442  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13443  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13444  %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl)
13445  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13446  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
13447  ret <vscale x 4 x float> %v
13448}
13449
13450define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13451; CHECK-LABEL: vfnmadd_vf_nxv4f32_commute:
13452; CHECK:       # %bb.0:
13453; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13454; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
13455; CHECK-NEXT:    ret
13456  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13457  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13458  %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl)
13459  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13460  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
13461  ret <vscale x 4 x float> %v
13462}
13463
13464define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13465; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked:
13466; CHECK:       # %bb.0:
13467; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13468; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
13469; CHECK-NEXT:    ret
13470  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13471  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13472  %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13473  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13474  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13475  ret <vscale x 4 x float> %v
13476}
13477
13478define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13479; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked_commute:
13480; CHECK:       # %bb.0:
13481; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13482; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
13483; CHECK-NEXT:    ret
13484  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13485  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13486  %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13487  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13488  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13489  ret <vscale x 4 x float> %v
13490}
13491
13492define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_neg_splat(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13493; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat:
13494; CHECK:       # %bb.0:
13495; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13496; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
13497; CHECK-NEXT:    ret
13498  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13499  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13500  %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
13501  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13502  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
13503  ret <vscale x 4 x float> %v
13504}
13505
13506define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_neg_splat_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13507; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_commute:
13508; CHECK:       # %bb.0:
13509; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13510; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
13511; CHECK-NEXT:    ret
13512  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13513  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13514  %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
13515  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13516  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
13517  ret <vscale x 4 x float> %v
13518}
13519
13520define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_neg_splat_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13521; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked:
13522; CHECK:       # %bb.0:
13523; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13524; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
13525; CHECK-NEXT:    ret
13526  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13527  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13528  %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13529  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13530  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13531  ret <vscale x 4 x float> %v
13532}
13533
13534define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_neg_splat_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13535; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked_commute:
13536; CHECK:       # %bb.0:
13537; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13538; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
13539; CHECK-NEXT:    ret
13540  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13541  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13542  %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13543  %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13544  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13545  ret <vscale x 4 x float> %v
13546}
13547
13548define <vscale x 4 x float> @vfnmsub_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13549; CHECK-LABEL: vfnmsub_vv_nxv4f32:
13550; CHECK:       # %bb.0:
13551; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13552; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
13553; CHECK-NEXT:    vmv.v.v v8, v10
13554; CHECK-NEXT:    ret
13555  %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)
13556  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
13557  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
13558  ret <vscale x 4 x float> %v
13559}
13560
13561define <vscale x 4 x float> @vfnmsub_vv_nxv4f32_commuted(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13562; CHECK-LABEL: vfnmsub_vv_nxv4f32_commuted:
13563; CHECK:       # %bb.0:
13564; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13565; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
13566; CHECK-NEXT:    ret
13567  %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)
13568  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
13569  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
13570  ret <vscale x 4 x float> %v
13571}
13572
13573define <vscale x 4 x float> @vfnmsub_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
13574; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked:
13575; CHECK:       # %bb.0:
13576; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13577; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
13578; CHECK-NEXT:    ret
13579  %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13580  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13581  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13582  ret <vscale x 4 x float> %v
13583}
13584
13585define <vscale x 4 x float> @vfnmsub_vv_nxv4f32_unmasked_commuted(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
13586; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked_commuted:
13587; CHECK:       # %bb.0:
13588; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13589; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
13590; CHECK-NEXT:    ret
13591  %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13592  %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13593  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13594  ret <vscale x 4 x float> %v
13595}
13596
13597define <vscale x 4 x float> @vfnmsub_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13598; CHECK-LABEL: vfnmsub_vf_nxv4f32:
13599; CHECK:       # %bb.0:
13600; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13601; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
13602; CHECK-NEXT:    ret
13603  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13604  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13605  %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl)
13606  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13607  ret <vscale x 4 x float> %v
13608}
13609
13610define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13611; CHECK-LABEL: vfnmsub_vf_nxv4f32_commute:
13612; CHECK:       # %bb.0:
13613; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13614; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
13615; CHECK-NEXT:    ret
13616  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13617  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13618  %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl)
13619  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13620  ret <vscale x 4 x float> %v
13621}
13622
13623define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13624; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked:
13625; CHECK:       # %bb.0:
13626; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13627; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
13628; CHECK-NEXT:    ret
13629  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13630  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13631  %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13632  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13633  ret <vscale x 4 x float> %v
13634}
13635
13636define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13637; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked_commute:
13638; CHECK:       # %bb.0:
13639; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13640; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
13641; CHECK-NEXT:    ret
13642  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13643  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13644  %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13645  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13646  ret <vscale x 4 x float> %v
13647}
13648
13649define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_neg_splat(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13650; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat:
13651; CHECK:       # %bb.0:
13652; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13653; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
13654; CHECK-NEXT:    ret
13655  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13656  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13657  %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
13658  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13659  ret <vscale x 4 x float> %v
13660}
13661
13662define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_neg_splat_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
13663; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_commute:
13664; CHECK:       # %bb.0:
13665; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13666; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
13667; CHECK-NEXT:    ret
13668  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13669  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13670  %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
13671  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
13672  ret <vscale x 4 x float> %v
13673}
13674
13675define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_neg_splat_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13676; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked:
13677; CHECK:       # %bb.0:
13678; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13679; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
13680; CHECK-NEXT:    ret
13681  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13682  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13683  %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13684  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13685  ret <vscale x 4 x float> %v
13686}
13687
13688define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_neg_splat_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) {
13689; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked_commute:
13690; CHECK:       # %bb.0:
13691; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
13692; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
13693; CHECK-NEXT:    ret
13694  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
13695  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
13696  %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13697  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
13698  ret <vscale x 4 x float> %v
13699}
13700
13701declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
13702
13703define <vscale x 8 x float> @vfmsub_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13704; CHECK-LABEL: vfmsub_vv_nxv8f32:
13705; CHECK:       # %bb.0:
13706; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13707; CHECK-NEXT:    vfmsub.vv v12, v8, v16, v0.t
13708; CHECK-NEXT:    vmv.v.v v8, v12
13709; CHECK-NEXT:    ret
13710  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
13711  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
13712  ret <vscale x 8 x float> %v
13713}
13714
13715define <vscale x 8 x float> @vfmsub_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
13716; CHECK-LABEL: vfmsub_vv_nxv8f32_unmasked:
13717; CHECK:       # %bb.0:
13718; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13719; CHECK-NEXT:    vfmsub.vv v8, v12, v16
13720; CHECK-NEXT:    ret
13721  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13722  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13723  ret <vscale x 8 x float> %v
13724}
13725
13726define <vscale x 8 x float> @vfmsub_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13727; CHECK-LABEL: vfmsub_vf_nxv8f32:
13728; CHECK:       # %bb.0:
13729; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13730; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
13731; CHECK-NEXT:    ret
13732  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13733  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13734  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
13735  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
13736  ret <vscale x 8 x float> %v
13737}
13738
13739define <vscale x 8 x float> @vfmsub_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13740; CHECK-LABEL: vfmsub_vf_nxv8f32_commute:
13741; CHECK:       # %bb.0:
13742; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13743; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
13744; CHECK-NEXT:    ret
13745  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13746  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13747  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
13748  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
13749  ret <vscale x 8 x float> %v
13750}
13751
13752define <vscale x 8 x float> @vfmsub_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
13753; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked:
13754; CHECK:       # %bb.0:
13755; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13756; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
13757; CHECK-NEXT:    ret
13758  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13759  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13760  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13761  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13762  ret <vscale x 8 x float> %v
13763}
13764
13765define <vscale x 8 x float> @vfmsub_vf_nxv8f32_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
13766; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked_commute:
13767; CHECK:       # %bb.0:
13768; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13769; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
13770; CHECK-NEXT:    ret
13771  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13772  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13773  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13774  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13775  ret <vscale x 8 x float> %v
13776}
13777
13778define <vscale x 8 x float> @vfnmadd_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13779; CHECK-LABEL: vfnmadd_vv_nxv8f32:
13780; CHECK:       # %bb.0:
13781; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13782; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
13783; CHECK-NEXT:    vmv.v.v v8, v12
13784; CHECK-NEXT:    ret
13785  %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)
13786  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
13787  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
13788  ret <vscale x 8 x float> %v
13789}
13790
13791define <vscale x 8 x float> @vfnmadd_vv_nxv8f32_commuted(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13792; CHECK-LABEL: vfnmadd_vv_nxv8f32_commuted:
13793; CHECK:       # %bb.0:
13794; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13795; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
13796; CHECK-NEXT:    ret
13797  %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)
13798  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
13799  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
13800  ret <vscale x 8 x float> %v
13801}
13802
13803define <vscale x 8 x float> @vfnmadd_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
13804; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked:
13805; CHECK:       # %bb.0:
13806; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13807; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
13808; CHECK-NEXT:    ret
13809  %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13810  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13811  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13812  ret <vscale x 8 x float> %v
13813}
13814
13815define <vscale x 8 x float> @vfnmadd_vv_nxv8f32_unmasked_commuted(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
13816; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked_commuted:
13817; CHECK:       # %bb.0:
13818; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13819; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
13820; CHECK-NEXT:    ret
13821  %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13822  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13823  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13824  ret <vscale x 8 x float> %v
13825}
13826
13827define <vscale x 8 x float> @vfnmadd_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13828; CHECK-LABEL: vfnmadd_vf_nxv8f32:
13829; CHECK:       # %bb.0:
13830; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13831; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
13832; CHECK-NEXT:    ret
13833  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13834  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13835  %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl)
13836  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
13837  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
13838  ret <vscale x 8 x float> %v
13839}
13840
13841define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13842; CHECK-LABEL: vfnmadd_vf_nxv8f32_commute:
13843; CHECK:       # %bb.0:
13844; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13845; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
13846; CHECK-NEXT:    ret
13847  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13848  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13849  %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl)
13850  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
13851  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
13852  ret <vscale x 8 x float> %v
13853}
13854
13855define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
13856; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked:
13857; CHECK:       # %bb.0:
13858; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13859; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
13860; CHECK-NEXT:    ret
13861  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13862  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13863  %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13864  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13865  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13866  ret <vscale x 8 x float> %v
13867}
13868
13869define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
13870; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked_commute:
13871; CHECK:       # %bb.0:
13872; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13873; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
13874; CHECK-NEXT:    ret
13875  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13876  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13877  %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13878  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13879  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13880  ret <vscale x 8 x float> %v
13881}
13882
13883define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_neg_splat(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13884; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat:
13885; CHECK:       # %bb.0:
13886; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13887; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
13888; CHECK-NEXT:    ret
13889  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13890  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13891  %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
13892  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
13893  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
13894  ret <vscale x 8 x float> %v
13895}
13896
13897define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_neg_splat_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13898; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_commute:
13899; CHECK:       # %bb.0:
13900; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13901; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
13902; CHECK-NEXT:    ret
13903  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13904  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13905  %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
13906  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
13907  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
13908  ret <vscale x 8 x float> %v
13909}
13910
13911define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_neg_splat_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
13912; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked:
13913; CHECK:       # %bb.0:
13914; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13915; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
13916; CHECK-NEXT:    ret
13917  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13918  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13919  %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13920  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13921  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13922  ret <vscale x 8 x float> %v
13923}
13924
13925define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_neg_splat_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
13926; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked_commute:
13927; CHECK:       # %bb.0:
13928; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13929; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
13930; CHECK-NEXT:    ret
13931  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13932  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13933  %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13934  %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13935  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13936  ret <vscale x 8 x float> %v
13937}
13938
13939define <vscale x 8 x float> @vfnmsub_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13940; CHECK-LABEL: vfnmsub_vv_nxv8f32:
13941; CHECK:       # %bb.0:
13942; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13943; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
13944; CHECK-NEXT:    vmv.v.v v8, v12
13945; CHECK-NEXT:    ret
13946  %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)
13947  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
13948  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
13949  ret <vscale x 8 x float> %v
13950}
13951
13952define <vscale x 8 x float> @vfnmsub_vv_nxv8f32_commuted(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13953; CHECK-LABEL: vfnmsub_vv_nxv8f32_commuted:
13954; CHECK:       # %bb.0:
13955; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13956; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
13957; CHECK-NEXT:    ret
13958  %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)
13959  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
13960  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
13961  ret <vscale x 8 x float> %v
13962}
13963
13964define <vscale x 8 x float> @vfnmsub_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
13965; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked:
13966; CHECK:       # %bb.0:
13967; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13968; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
13969; CHECK-NEXT:    ret
13970  %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13971  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13972  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13973  ret <vscale x 8 x float> %v
13974}
13975
13976define <vscale x 8 x float> @vfnmsub_vv_nxv8f32_unmasked_commuted(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
13977; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked_commuted:
13978; CHECK:       # %bb.0:
13979; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13980; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
13981; CHECK-NEXT:    ret
13982  %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13983  %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13984  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
13985  ret <vscale x 8 x float> %v
13986}
13987
13988define <vscale x 8 x float> @vfnmsub_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
13989; CHECK-LABEL: vfnmsub_vf_nxv8f32:
13990; CHECK:       # %bb.0:
13991; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
13992; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
13993; CHECK-NEXT:    ret
13994  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
13995  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
13996  %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl)
13997  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
13998  ret <vscale x 8 x float> %v
13999}
14000
14001define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
14002; CHECK-LABEL: vfnmsub_vf_nxv8f32_commute:
14003; CHECK:       # %bb.0:
14004; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
14005; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
14006; CHECK-NEXT:    ret
14007  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
14008  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
14009  %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl)
14010  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
14011  ret <vscale x 8 x float> %v
14012}
14013
14014define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
14015; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked:
14016; CHECK:       # %bb.0:
14017; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
14018; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
14019; CHECK-NEXT:    ret
14020  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
14021  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
14022  %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
14023  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
14024  ret <vscale x 8 x float> %v
14025}
14026
14027define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
14028; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked_commute:
14029; CHECK:       # %bb.0:
14030; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
14031; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
14032; CHECK-NEXT:    ret
14033  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
14034  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
14035  %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
14036  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
14037  ret <vscale x 8 x float> %v
14038}
14039
14040define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_neg_splat(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
14041; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat:
14042; CHECK:       # %bb.0:
14043; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
14044; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
14045; CHECK-NEXT:    ret
14046  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
14047  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
14048  %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
14049  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
14050  ret <vscale x 8 x float> %v
14051}
14052
14053define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_neg_splat_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
14054; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_commute:
14055; CHECK:       # %bb.0:
14056; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
14057; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
14058; CHECK-NEXT:    ret
14059  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
14060  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
14061  %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
14062  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
14063  ret <vscale x 8 x float> %v
14064}
14065
14066define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_neg_splat_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
14067; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked:
14068; CHECK:       # %bb.0:
14069; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
14070; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
14071; CHECK-NEXT:    ret
14072  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
14073  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
14074  %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
14075  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
14076  ret <vscale x 8 x float> %v
14077}
14078
14079define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_neg_splat_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) {
14080; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked_commute:
14081; CHECK:       # %bb.0:
14082; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
14083; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
14084; CHECK-NEXT:    ret
14085  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
14086  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
14087  %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
14088  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
14089  ret <vscale x 8 x float> %v
14090}
14091
14092declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
14093
14094define <vscale x 16 x float> @vfmsub_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14095; CHECK-LABEL: vfmsub_vv_nxv16f32:
14096; CHECK:       # %bb.0:
14097; CHECK-NEXT:    vl8re32.v v24, (a0)
14098; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14099; CHECK-NEXT:    vfmsub.vv v16, v8, v24, v0.t
14100; CHECK-NEXT:    vmv.v.v v8, v16
14101; CHECK-NEXT:    ret
14102  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
14103  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
14104  ret <vscale x 16 x float> %v
14105}
14106
14107define <vscale x 16 x float> @vfmsub_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
14108; CHECK-LABEL: vfmsub_vv_nxv16f32_unmasked:
14109; CHECK:       # %bb.0:
14110; CHECK-NEXT:    vl8re32.v v24, (a0)
14111; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14112; CHECK-NEXT:    vfmsub.vv v8, v16, v24
14113; CHECK-NEXT:    ret
14114  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14115  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14116  ret <vscale x 16 x float> %v
14117}
14118
14119define <vscale x 16 x float> @vfmsub_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14120; CHECK-LABEL: vfmsub_vf_nxv16f32:
14121; CHECK:       # %bb.0:
14122; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14123; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
14124; CHECK-NEXT:    ret
14125  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14126  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14127  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14128  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
14129  ret <vscale x 16 x float> %v
14130}
14131
14132define <vscale x 16 x float> @vfmsub_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14133; CHECK-LABEL: vfmsub_vf_nxv16f32_commute:
14134; CHECK:       # %bb.0:
14135; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14136; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
14137; CHECK-NEXT:    ret
14138  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14139  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14140  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14141  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
14142  ret <vscale x 16 x float> %v
14143}
14144
14145define <vscale x 16 x float> @vfmsub_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14146; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked:
14147; CHECK:       # %bb.0:
14148; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14149; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
14150; CHECK-NEXT:    ret
14151  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14152  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14153  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14154  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14155  ret <vscale x 16 x float> %v
14156}
14157
14158define <vscale x 16 x float> @vfmsub_vf_nxv16f32_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14159; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked_commute:
14160; CHECK:       # %bb.0:
14161; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14162; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
14163; CHECK-NEXT:    ret
14164  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14165  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14166  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14167  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14168  ret <vscale x 16 x float> %v
14169}
14170
14171define <vscale x 16 x float> @vfnmadd_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14172; CHECK-LABEL: vfnmadd_vv_nxv16f32:
14173; CHECK:       # %bb.0:
14174; CHECK-NEXT:    vl8re32.v v24, (a0)
14175; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14176; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
14177; CHECK-NEXT:    vmv.v.v v8, v16
14178; CHECK-NEXT:    ret
14179  %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl)
14180  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
14181  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
14182  ret <vscale x 16 x float> %v
14183}
14184
14185define <vscale x 16 x float> @vfnmadd_vv_nxv16f32_commuted(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14186; CHECK-LABEL: vfnmadd_vv_nxv16f32_commuted:
14187; CHECK:       # %bb.0:
14188; CHECK-NEXT:    vl8re32.v v24, (a0)
14189; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14190; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
14191; CHECK-NEXT:    ret
14192  %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl)
14193  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
14194  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
14195  ret <vscale x 16 x float> %v
14196}
14197
14198define <vscale x 16 x float> @vfnmadd_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
14199; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked:
14200; CHECK:       # %bb.0:
14201; CHECK-NEXT:    vl8re32.v v24, (a0)
14202; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14203; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
14204; CHECK-NEXT:    ret
14205  %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14206  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14207  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14208  ret <vscale x 16 x float> %v
14209}
14210
14211define <vscale x 16 x float> @vfnmadd_vv_nxv16f32_unmasked_commuted(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
14212; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked_commuted:
14213; CHECK:       # %bb.0:
14214; CHECK-NEXT:    vl8re32.v v24, (a0)
14215; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14216; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
14217; CHECK-NEXT:    ret
14218  %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14219  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14220  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14221  ret <vscale x 16 x float> %v
14222}
14223
14224define <vscale x 16 x float> @vfnmadd_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14225; CHECK-LABEL: vfnmadd_vf_nxv16f32:
14226; CHECK:       # %bb.0:
14227; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14228; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
14229; CHECK-NEXT:    ret
14230  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14231  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14232  %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl)
14233  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14234  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
14235  ret <vscale x 16 x float> %v
14236}
14237
14238define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14239; CHECK-LABEL: vfnmadd_vf_nxv16f32_commute:
14240; CHECK:       # %bb.0:
14241; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14242; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
14243; CHECK-NEXT:    ret
14244  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14245  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14246  %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl)
14247  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14248  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
14249  ret <vscale x 16 x float> %v
14250}
14251
14252define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14253; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked:
14254; CHECK:       # %bb.0:
14255; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14256; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
14257; CHECK-NEXT:    ret
14258  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14259  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14260  %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14261  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14262  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14263  ret <vscale x 16 x float> %v
14264}
14265
14266define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14267; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked_commute:
14268; CHECK:       # %bb.0:
14269; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14270; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
14271; CHECK-NEXT:    ret
14272  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14273  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14274  %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14275  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14276  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14277  ret <vscale x 16 x float> %v
14278}
14279
14280define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_neg_splat(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14281; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat:
14282; CHECK:       # %bb.0:
14283; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14284; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
14285; CHECK-NEXT:    ret
14286  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14287  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14288  %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl)
14289  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14290  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
14291  ret <vscale x 16 x float> %v
14292}
14293
14294define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_neg_splat_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14295; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_commute:
14296; CHECK:       # %bb.0:
14297; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14298; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
14299; CHECK-NEXT:    ret
14300  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14301  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14302  %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl)
14303  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14304  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
14305  ret <vscale x 16 x float> %v
14306}
14307
14308define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_neg_splat_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14309; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked:
14310; CHECK:       # %bb.0:
14311; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14312; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
14313; CHECK-NEXT:    ret
14314  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14315  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14316  %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14317  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14318  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14319  ret <vscale x 16 x float> %v
14320}
14321
14322define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_neg_splat_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14323; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked_commute:
14324; CHECK:       # %bb.0:
14325; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14326; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
14327; CHECK-NEXT:    ret
14328  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14329  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14330  %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14331  %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14332  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14333  ret <vscale x 16 x float> %v
14334}
14335
14336define <vscale x 16 x float> @vfnmsub_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14337; CHECK-LABEL: vfnmsub_vv_nxv16f32:
14338; CHECK:       # %bb.0:
14339; CHECK-NEXT:    vl8re32.v v24, (a0)
14340; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14341; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
14342; CHECK-NEXT:    vmv.v.v v8, v16
14343; CHECK-NEXT:    ret
14344  %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl)
14345  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
14346  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
14347  ret <vscale x 16 x float> %v
14348}
14349
14350define <vscale x 16 x float> @vfnmsub_vv_nxv16f32_commuted(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14351; CHECK-LABEL: vfnmsub_vv_nxv16f32_commuted:
14352; CHECK:       # %bb.0:
14353; CHECK-NEXT:    vl8re32.v v24, (a0)
14354; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14355; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
14356; CHECK-NEXT:    ret
14357  %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl)
14358  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
14359  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
14360  ret <vscale x 16 x float> %v
14361}
14362
14363define <vscale x 16 x float> @vfnmsub_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
14364; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked:
14365; CHECK:       # %bb.0:
14366; CHECK-NEXT:    vl8re32.v v24, (a0)
14367; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14368; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
14369; CHECK-NEXT:    ret
14370  %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14371  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14372  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14373  ret <vscale x 16 x float> %v
14374}
14375
14376define <vscale x 16 x float> @vfnmsub_vv_nxv16f32_unmasked_commuted(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
14377; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked_commuted:
14378; CHECK:       # %bb.0:
14379; CHECK-NEXT:    vl8re32.v v24, (a0)
14380; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
14381; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
14382; CHECK-NEXT:    ret
14383  %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14384  %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14385  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14386  ret <vscale x 16 x float> %v
14387}
14388
14389define <vscale x 16 x float> @vfnmsub_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14390; CHECK-LABEL: vfnmsub_vf_nxv16f32:
14391; CHECK:       # %bb.0:
14392; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14393; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
14394; CHECK-NEXT:    ret
14395  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14396  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14397  %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl)
14398  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14399  ret <vscale x 16 x float> %v
14400}
14401
14402define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14403; CHECK-LABEL: vfnmsub_vf_nxv16f32_commute:
14404; CHECK:       # %bb.0:
14405; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14406; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
14407; CHECK-NEXT:    ret
14408  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14409  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14410  %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl)
14411  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14412  ret <vscale x 16 x float> %v
14413}
14414
14415define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14416; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked:
14417; CHECK:       # %bb.0:
14418; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14419; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
14420; CHECK-NEXT:    ret
14421  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14422  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14423  %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14424  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14425  ret <vscale x 16 x float> %v
14426}
14427
14428define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14429; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked_commute:
14430; CHECK:       # %bb.0:
14431; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14432; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
14433; CHECK-NEXT:    ret
14434  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14435  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14436  %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14437  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14438  ret <vscale x 16 x float> %v
14439}
14440
14441define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_neg_splat(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14442; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat:
14443; CHECK:       # %bb.0:
14444; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14445; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
14446; CHECK-NEXT:    ret
14447  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14448  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14449  %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl)
14450  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14451  ret <vscale x 16 x float> %v
14452}
14453
14454define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_neg_splat_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) {
14455; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_commute:
14456; CHECK:       # %bb.0:
14457; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14458; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
14459; CHECK-NEXT:    ret
14460  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14461  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14462  %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl)
14463  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
14464  ret <vscale x 16 x float> %v
14465}
14466
14467define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_neg_splat_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14468; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked:
14469; CHECK:       # %bb.0:
14470; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14471; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
14472; CHECK-NEXT:    ret
14473  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14474  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14475  %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14476  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14477  ret <vscale x 16 x float> %v
14478}
14479
14480define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_neg_splat_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) {
14481; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked_commute:
14482; CHECK:       # %bb.0:
14483; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
14484; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
14485; CHECK-NEXT:    ret
14486  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
14487  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
14488  %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14489  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl)
14490  ret <vscale x 16 x float> %v
14491}
14492
14493declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
14494
14495define <vscale x 1 x double> @vfmsub_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14496; CHECK-LABEL: vfmsub_vv_nxv1f64:
14497; CHECK:       # %bb.0:
14498; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14499; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
14500; CHECK-NEXT:    vmv.v.v v8, v9
14501; CHECK-NEXT:    ret
14502  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
14503  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
14504  ret <vscale x 1 x double> %v
14505}
14506
14507define <vscale x 1 x double> @vfmsub_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
14508; CHECK-LABEL: vfmsub_vv_nxv1f64_unmasked:
14509; CHECK:       # %bb.0:
14510; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14511; CHECK-NEXT:    vfmsub.vv v8, v9, v10
14512; CHECK-NEXT:    ret
14513  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14514  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14515  ret <vscale x 1 x double> %v
14516}
14517
14518define <vscale x 1 x double> @vfmsub_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14519; CHECK-LABEL: vfmsub_vf_nxv1f64:
14520; CHECK:       # %bb.0:
14521; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14522; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
14523; CHECK-NEXT:    ret
14524  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14525  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14526  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14527  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
14528  ret <vscale x 1 x double> %v
14529}
14530
14531define <vscale x 1 x double> @vfmsub_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14532; CHECK-LABEL: vfmsub_vf_nxv1f64_commute:
14533; CHECK:       # %bb.0:
14534; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14535; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
14536; CHECK-NEXT:    ret
14537  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14538  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14539  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14540  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
14541  ret <vscale x 1 x double> %v
14542}
14543
14544define <vscale x 1 x double> @vfmsub_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14545; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked:
14546; CHECK:       # %bb.0:
14547; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14548; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
14549; CHECK-NEXT:    ret
14550  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14551  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14552  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14553  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14554  ret <vscale x 1 x double> %v
14555}
14556
14557define <vscale x 1 x double> @vfmsub_vf_nxv1f64_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14558; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked_commute:
14559; CHECK:       # %bb.0:
14560; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14561; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
14562; CHECK-NEXT:    ret
14563  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14564  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14565  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14566  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14567  ret <vscale x 1 x double> %v
14568}
14569
14570define <vscale x 1 x double> @vfnmadd_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14571; CHECK-LABEL: vfnmadd_vv_nxv1f64:
14572; CHECK:       # %bb.0:
14573; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14574; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
14575; CHECK-NEXT:    vmv.v.v v8, v9
14576; CHECK-NEXT:    ret
14577  %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl)
14578  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
14579  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
14580  ret <vscale x 1 x double> %v
14581}
14582
14583define <vscale x 1 x double> @vfnmadd_vv_nxv1f64_commuted(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14584; CHECK-LABEL: vfnmadd_vv_nxv1f64_commuted:
14585; CHECK:       # %bb.0:
14586; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14587; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
14588; CHECK-NEXT:    ret
14589  %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl)
14590  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
14591  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
14592  ret <vscale x 1 x double> %v
14593}
14594
14595define <vscale x 1 x double> @vfnmadd_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
14596; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked:
14597; CHECK:       # %bb.0:
14598; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14599; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
14600; CHECK-NEXT:    ret
14601  %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14602  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14603  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14604  ret <vscale x 1 x double> %v
14605}
14606
14607define <vscale x 1 x double> @vfnmadd_vv_nxv1f64_unmasked_commuted(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
14608; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked_commuted:
14609; CHECK:       # %bb.0:
14610; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14611; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
14612; CHECK-NEXT:    ret
14613  %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14614  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14615  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14616  ret <vscale x 1 x double> %v
14617}
14618
14619define <vscale x 1 x double> @vfnmadd_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14620; CHECK-LABEL: vfnmadd_vf_nxv1f64:
14621; CHECK:       # %bb.0:
14622; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14623; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
14624; CHECK-NEXT:    ret
14625  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14626  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14627  %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl)
14628  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14629  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
14630  ret <vscale x 1 x double> %v
14631}
14632
14633define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14634; CHECK-LABEL: vfnmadd_vf_nxv1f64_commute:
14635; CHECK:       # %bb.0:
14636; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14637; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
14638; CHECK-NEXT:    ret
14639  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14640  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14641  %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl)
14642  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14643  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
14644  ret <vscale x 1 x double> %v
14645}
14646
14647define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14648; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked:
14649; CHECK:       # %bb.0:
14650; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14651; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
14652; CHECK-NEXT:    ret
14653  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14654  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14655  %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14656  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14657  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14658  ret <vscale x 1 x double> %v
14659}
14660
14661define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14662; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked_commute:
14663; CHECK:       # %bb.0:
14664; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14665; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
14666; CHECK-NEXT:    ret
14667  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14668  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14669  %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14670  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14671  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14672  ret <vscale x 1 x double> %v
14673}
14674
14675define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_neg_splat(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14676; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat:
14677; CHECK:       # %bb.0:
14678; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14679; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
14680; CHECK-NEXT:    ret
14681  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14682  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14683  %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl)
14684  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14685  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
14686  ret <vscale x 1 x double> %v
14687}
14688
14689define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_neg_splat_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14690; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_commute:
14691; CHECK:       # %bb.0:
14692; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14693; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
14694; CHECK-NEXT:    ret
14695  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14696  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14697  %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl)
14698  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14699  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
14700  ret <vscale x 1 x double> %v
14701}
14702
14703define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_neg_splat_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14704; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked:
14705; CHECK:       # %bb.0:
14706; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14707; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
14708; CHECK-NEXT:    ret
14709  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14710  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14711  %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14712  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14713  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14714  ret <vscale x 1 x double> %v
14715}
14716
14717define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_neg_splat_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14718; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked_commute:
14719; CHECK:       # %bb.0:
14720; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14721; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
14722; CHECK-NEXT:    ret
14723  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14724  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14725  %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14726  %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14727  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14728  ret <vscale x 1 x double> %v
14729}
14730
14731define <vscale x 1 x double> @vfnmsub_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14732; CHECK-LABEL: vfnmsub_vv_nxv1f64:
14733; CHECK:       # %bb.0:
14734; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14735; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
14736; CHECK-NEXT:    vmv.v.v v8, v9
14737; CHECK-NEXT:    ret
14738  %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl)
14739  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
14740  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
14741  ret <vscale x 1 x double> %v
14742}
14743
14744define <vscale x 1 x double> @vfnmsub_vv_nxv1f64_commuted(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14745; CHECK-LABEL: vfnmsub_vv_nxv1f64_commuted:
14746; CHECK:       # %bb.0:
14747; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14748; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
14749; CHECK-NEXT:    ret
14750  %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl)
14751  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
14752  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
14753  ret <vscale x 1 x double> %v
14754}
14755
14756define <vscale x 1 x double> @vfnmsub_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
14757; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked:
14758; CHECK:       # %bb.0:
14759; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14760; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
14761; CHECK-NEXT:    ret
14762  %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14763  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14764  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14765  ret <vscale x 1 x double> %v
14766}
14767
14768define <vscale x 1 x double> @vfnmsub_vv_nxv1f64_unmasked_commuted(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
14769; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked_commuted:
14770; CHECK:       # %bb.0:
14771; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14772; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
14773; CHECK-NEXT:    ret
14774  %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14775  %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14776  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14777  ret <vscale x 1 x double> %v
14778}
14779
14780define <vscale x 1 x double> @vfnmsub_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14781; CHECK-LABEL: vfnmsub_vf_nxv1f64:
14782; CHECK:       # %bb.0:
14783; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14784; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
14785; CHECK-NEXT:    ret
14786  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14787  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14788  %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl)
14789  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14790  ret <vscale x 1 x double> %v
14791}
14792
14793define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14794; CHECK-LABEL: vfnmsub_vf_nxv1f64_commute:
14795; CHECK:       # %bb.0:
14796; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14797; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
14798; CHECK-NEXT:    ret
14799  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14800  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14801  %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl)
14802  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14803  ret <vscale x 1 x double> %v
14804}
14805
14806define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14807; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked:
14808; CHECK:       # %bb.0:
14809; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14810; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
14811; CHECK-NEXT:    ret
14812  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14813  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14814  %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14815  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14816  ret <vscale x 1 x double> %v
14817}
14818
14819define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14820; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked_commute:
14821; CHECK:       # %bb.0:
14822; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14823; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
14824; CHECK-NEXT:    ret
14825  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14826  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14827  %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14828  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14829  ret <vscale x 1 x double> %v
14830}
14831
14832define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_neg_splat(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14833; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat:
14834; CHECK:       # %bb.0:
14835; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14836; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
14837; CHECK-NEXT:    ret
14838  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14839  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14840  %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl)
14841  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14842  ret <vscale x 1 x double> %v
14843}
14844
14845define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_neg_splat_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14846; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_commute:
14847; CHECK:       # %bb.0:
14848; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14849; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
14850; CHECK-NEXT:    ret
14851  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14852  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14853  %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl)
14854  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
14855  ret <vscale x 1 x double> %v
14856}
14857
14858define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_neg_splat_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14859; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked:
14860; CHECK:       # %bb.0:
14861; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14862; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
14863; CHECK-NEXT:    ret
14864  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14865  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14866  %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14867  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14868  ret <vscale x 1 x double> %v
14869}
14870
14871define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_neg_splat_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) {
14872; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked_commute:
14873; CHECK:       # %bb.0:
14874; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
14875; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
14876; CHECK-NEXT:    ret
14877  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
14878  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
14879  %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14880  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl)
14881  ret <vscale x 1 x double> %v
14882}
14883
14884declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
14885
14886define <vscale x 2 x double> @vfmsub_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
14887; CHECK-LABEL: vfmsub_vv_nxv2f64:
14888; CHECK:       # %bb.0:
14889; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14890; CHECK-NEXT:    vfmsub.vv v10, v8, v12, v0.t
14891; CHECK-NEXT:    vmv.v.v v8, v10
14892; CHECK-NEXT:    ret
14893  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
14894  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
14895  ret <vscale x 2 x double> %v
14896}
14897
14898define <vscale x 2 x double> @vfmsub_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
14899; CHECK-LABEL: vfmsub_vv_nxv2f64_unmasked:
14900; CHECK:       # %bb.0:
14901; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14902; CHECK-NEXT:    vfmsub.vv v8, v10, v12
14903; CHECK-NEXT:    ret
14904  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14905  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14906  ret <vscale x 2 x double> %v
14907}
14908
14909define <vscale x 2 x double> @vfmsub_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
14910; CHECK-LABEL: vfmsub_vf_nxv2f64:
14911; CHECK:       # %bb.0:
14912; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14913; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
14914; CHECK-NEXT:    ret
14915  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
14916  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
14917  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
14918  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
14919  ret <vscale x 2 x double> %v
14920}
14921
14922define <vscale x 2 x double> @vfmsub_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
14923; CHECK-LABEL: vfmsub_vf_nxv2f64_commute:
14924; CHECK:       # %bb.0:
14925; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14926; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
14927; CHECK-NEXT:    ret
14928  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
14929  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
14930  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
14931  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
14932  ret <vscale x 2 x double> %v
14933}
14934
14935define <vscale x 2 x double> @vfmsub_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
14936; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked:
14937; CHECK:       # %bb.0:
14938; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14939; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
14940; CHECK-NEXT:    ret
14941  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
14942  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
14943  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14944  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14945  ret <vscale x 2 x double> %v
14946}
14947
14948define <vscale x 2 x double> @vfmsub_vf_nxv2f64_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
14949; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked_commute:
14950; CHECK:       # %bb.0:
14951; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14952; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
14953; CHECK-NEXT:    ret
14954  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
14955  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
14956  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14957  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14958  ret <vscale x 2 x double> %v
14959}
14960
14961define <vscale x 2 x double> @vfnmadd_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
14962; CHECK-LABEL: vfnmadd_vv_nxv2f64:
14963; CHECK:       # %bb.0:
14964; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14965; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
14966; CHECK-NEXT:    vmv.v.v v8, v10
14967; CHECK-NEXT:    ret
14968  %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl)
14969  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
14970  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
14971  ret <vscale x 2 x double> %v
14972}
14973
14974define <vscale x 2 x double> @vfnmadd_vv_nxv2f64_commuted(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
14975; CHECK-LABEL: vfnmadd_vv_nxv2f64_commuted:
14976; CHECK:       # %bb.0:
14977; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14978; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
14979; CHECK-NEXT:    ret
14980  %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl)
14981  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
14982  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
14983  ret <vscale x 2 x double> %v
14984}
14985
14986define <vscale x 2 x double> @vfnmadd_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
14987; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked:
14988; CHECK:       # %bb.0:
14989; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
14990; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
14991; CHECK-NEXT:    ret
14992  %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14993  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14994  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
14995  ret <vscale x 2 x double> %v
14996}
14997
14998define <vscale x 2 x double> @vfnmadd_vv_nxv2f64_unmasked_commuted(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
14999; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked_commuted:
15000; CHECK:       # %bb.0:
15001; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15002; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
15003; CHECK-NEXT:    ret
15004  %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15005  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15006  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15007  ret <vscale x 2 x double> %v
15008}
15009
15010define <vscale x 2 x double> @vfnmadd_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15011; CHECK-LABEL: vfnmadd_vf_nxv2f64:
15012; CHECK:       # %bb.0:
15013; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15014; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
15015; CHECK-NEXT:    ret
15016  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15017  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15018  %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
15019  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
15020  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
15021  ret <vscale x 2 x double> %v
15022}
15023
15024define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15025; CHECK-LABEL: vfnmadd_vf_nxv2f64_commute:
15026; CHECK:       # %bb.0:
15027; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15028; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
15029; CHECK-NEXT:    ret
15030  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15031  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15032  %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
15033  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
15034  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
15035  ret <vscale x 2 x double> %v
15036}
15037
15038define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
15039; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked:
15040; CHECK:       # %bb.0:
15041; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15042; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
15043; CHECK-NEXT:    ret
15044  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15045  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15046  %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15047  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15048  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15049  ret <vscale x 2 x double> %v
15050}
15051
15052define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
15053; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked_commute:
15054; CHECK:       # %bb.0:
15055; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15056; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
15057; CHECK-NEXT:    ret
15058  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15059  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15060  %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15061  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15062  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15063  ret <vscale x 2 x double> %v
15064}
15065
15066define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_neg_splat(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15067; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat:
15068; CHECK:       # %bb.0:
15069; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15070; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
15071; CHECK-NEXT:    ret
15072  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15073  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15074  %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl)
15075  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
15076  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
15077  ret <vscale x 2 x double> %v
15078}
15079
15080define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_neg_splat_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15081; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_commute:
15082; CHECK:       # %bb.0:
15083; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15084; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
15085; CHECK-NEXT:    ret
15086  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15087  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15088  %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl)
15089  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
15090  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
15091  ret <vscale x 2 x double> %v
15092}
15093
15094define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_neg_splat_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
15095; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked:
15096; CHECK:       # %bb.0:
15097; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15098; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
15099; CHECK-NEXT:    ret
15100  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15101  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15102  %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15103  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15104  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15105  ret <vscale x 2 x double> %v
15106}
15107
15108define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_neg_splat_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
15109; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked_commute:
15110; CHECK:       # %bb.0:
15111; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15112; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
15113; CHECK-NEXT:    ret
15114  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15115  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15116  %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15117  %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15118  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15119  ret <vscale x 2 x double> %v
15120}
15121
15122define <vscale x 2 x double> @vfnmsub_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15123; CHECK-LABEL: vfnmsub_vv_nxv2f64:
15124; CHECK:       # %bb.0:
15125; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15126; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
15127; CHECK-NEXT:    vmv.v.v v8, v10
15128; CHECK-NEXT:    ret
15129  %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl)
15130  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
15131  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
15132  ret <vscale x 2 x double> %v
15133}
15134
15135define <vscale x 2 x double> @vfnmsub_vv_nxv2f64_commuted(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15136; CHECK-LABEL: vfnmsub_vv_nxv2f64_commuted:
15137; CHECK:       # %bb.0:
15138; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15139; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
15140; CHECK-NEXT:    ret
15141  %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl)
15142  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
15143  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
15144  ret <vscale x 2 x double> %v
15145}
15146
15147define <vscale x 2 x double> @vfnmsub_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
15148; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked:
15149; CHECK:       # %bb.0:
15150; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15151; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
15152; CHECK-NEXT:    ret
15153  %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15154  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15155  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15156  ret <vscale x 2 x double> %v
15157}
15158
15159define <vscale x 2 x double> @vfnmsub_vv_nxv2f64_unmasked_commuted(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
15160; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked_commuted:
15161; CHECK:       # %bb.0:
15162; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15163; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
15164; CHECK-NEXT:    ret
15165  %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15166  %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15167  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15168  ret <vscale x 2 x double> %v
15169}
15170
15171define <vscale x 2 x double> @vfnmsub_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15172; CHECK-LABEL: vfnmsub_vf_nxv2f64:
15173; CHECK:       # %bb.0:
15174; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15175; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
15176; CHECK-NEXT:    ret
15177  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15178  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15179  %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
15180  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
15181  ret <vscale x 2 x double> %v
15182}
15183
15184define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15185; CHECK-LABEL: vfnmsub_vf_nxv2f64_commute:
15186; CHECK:       # %bb.0:
15187; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15188; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
15189; CHECK-NEXT:    ret
15190  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15191  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15192  %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
15193  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
15194  ret <vscale x 2 x double> %v
15195}
15196
15197define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
15198; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked:
15199; CHECK:       # %bb.0:
15200; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15201; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
15202; CHECK-NEXT:    ret
15203  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15204  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15205  %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15206  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15207  ret <vscale x 2 x double> %v
15208}
15209
15210define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
15211; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked_commute:
15212; CHECK:       # %bb.0:
15213; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15214; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
15215; CHECK-NEXT:    ret
15216  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15217  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15218  %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15219  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15220  ret <vscale x 2 x double> %v
15221}
15222
15223define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_neg_splat(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15224; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat:
15225; CHECK:       # %bb.0:
15226; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15227; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
15228; CHECK-NEXT:    ret
15229  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15230  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15231  %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl)
15232  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
15233  ret <vscale x 2 x double> %v
15234}
15235
15236define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_neg_splat_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) {
15237; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_commute:
15238; CHECK:       # %bb.0:
15239; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15240; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
15241; CHECK-NEXT:    ret
15242  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15243  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15244  %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl)
15245  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
15246  ret <vscale x 2 x double> %v
15247}
15248
15249define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_neg_splat_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
15250; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked:
15251; CHECK:       # %bb.0:
15252; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15253; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
15254; CHECK-NEXT:    ret
15255  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15256  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15257  %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15258  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15259  ret <vscale x 2 x double> %v
15260}
15261
15262define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_neg_splat_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) {
15263; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked_commute:
15264; CHECK:       # %bb.0:
15265; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
15266; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
15267; CHECK-NEXT:    ret
15268  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
15269  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
15270  %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15271  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl)
15272  ret <vscale x 2 x double> %v
15273}
15274
15275declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
15276
15277define <vscale x 4 x double> @vfmsub_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15278; CHECK-LABEL: vfmsub_vv_nxv4f64:
15279; CHECK:       # %bb.0:
15280; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15281; CHECK-NEXT:    vfmsub.vv v12, v8, v16, v0.t
15282; CHECK-NEXT:    vmv.v.v v8, v12
15283; CHECK-NEXT:    ret
15284  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
15285  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
15286  ret <vscale x 4 x double> %v
15287}
15288
15289define <vscale x 4 x double> @vfmsub_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
15290; CHECK-LABEL: vfmsub_vv_nxv4f64_unmasked:
15291; CHECK:       # %bb.0:
15292; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15293; CHECK-NEXT:    vfmsub.vv v8, v12, v16
15294; CHECK-NEXT:    ret
15295  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15296  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15297  ret <vscale x 4 x double> %v
15298}
15299
15300define <vscale x 4 x double> @vfmsub_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15301; CHECK-LABEL: vfmsub_vf_nxv4f64:
15302; CHECK:       # %bb.0:
15303; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15304; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
15305; CHECK-NEXT:    ret
15306  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15307  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15308  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15309  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
15310  ret <vscale x 4 x double> %v
15311}
15312
15313define <vscale x 4 x double> @vfmsub_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15314; CHECK-LABEL: vfmsub_vf_nxv4f64_commute:
15315; CHECK:       # %bb.0:
15316; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15317; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
15318; CHECK-NEXT:    ret
15319  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15320  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15321  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15322  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
15323  ret <vscale x 4 x double> %v
15324}
15325
15326define <vscale x 4 x double> @vfmsub_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15327; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked:
15328; CHECK:       # %bb.0:
15329; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15330; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
15331; CHECK-NEXT:    ret
15332  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15333  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15334  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15335  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15336  ret <vscale x 4 x double> %v
15337}
15338
15339define <vscale x 4 x double> @vfmsub_vf_nxv4f64_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15340; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked_commute:
15341; CHECK:       # %bb.0:
15342; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15343; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
15344; CHECK-NEXT:    ret
15345  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15346  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15347  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15348  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15349  ret <vscale x 4 x double> %v
15350}
15351
15352define <vscale x 4 x double> @vfnmadd_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15353; CHECK-LABEL: vfnmadd_vv_nxv4f64:
15354; CHECK:       # %bb.0:
15355; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15356; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
15357; CHECK-NEXT:    vmv.v.v v8, v12
15358; CHECK-NEXT:    ret
15359  %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl)
15360  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
15361  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
15362  ret <vscale x 4 x double> %v
15363}
15364
15365define <vscale x 4 x double> @vfnmadd_vv_nxv4f64_commuted(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15366; CHECK-LABEL: vfnmadd_vv_nxv4f64_commuted:
15367; CHECK:       # %bb.0:
15368; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15369; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
15370; CHECK-NEXT:    ret
15371  %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl)
15372  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
15373  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
15374  ret <vscale x 4 x double> %v
15375}
15376
15377define <vscale x 4 x double> @vfnmadd_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
15378; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked:
15379; CHECK:       # %bb.0:
15380; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15381; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
15382; CHECK-NEXT:    ret
15383  %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15384  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15385  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15386  ret <vscale x 4 x double> %v
15387}
15388
15389define <vscale x 4 x double> @vfnmadd_vv_nxv4f64_unmasked_commuted(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
15390; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked_commuted:
15391; CHECK:       # %bb.0:
15392; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15393; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
15394; CHECK-NEXT:    ret
15395  %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15396  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15397  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15398  ret <vscale x 4 x double> %v
15399}
15400
15401define <vscale x 4 x double> @vfnmadd_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15402; CHECK-LABEL: vfnmadd_vf_nxv4f64:
15403; CHECK:       # %bb.0:
15404; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15405; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
15406; CHECK-NEXT:    ret
15407  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15408  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15409  %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl)
15410  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15411  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
15412  ret <vscale x 4 x double> %v
15413}
15414
15415define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15416; CHECK-LABEL: vfnmadd_vf_nxv4f64_commute:
15417; CHECK:       # %bb.0:
15418; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15419; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
15420; CHECK-NEXT:    ret
15421  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15422  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15423  %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl)
15424  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15425  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
15426  ret <vscale x 4 x double> %v
15427}
15428
15429define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15430; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked:
15431; CHECK:       # %bb.0:
15432; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15433; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
15434; CHECK-NEXT:    ret
15435  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15436  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15437  %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15438  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15439  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15440  ret <vscale x 4 x double> %v
15441}
15442
15443define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15444; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked_commute:
15445; CHECK:       # %bb.0:
15446; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15447; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
15448; CHECK-NEXT:    ret
15449  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15450  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15451  %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15452  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15453  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15454  ret <vscale x 4 x double> %v
15455}
15456
15457define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_neg_splat(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15458; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat:
15459; CHECK:       # %bb.0:
15460; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15461; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
15462; CHECK-NEXT:    ret
15463  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15464  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15465  %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl)
15466  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15467  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
15468  ret <vscale x 4 x double> %v
15469}
15470
15471define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_neg_splat_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15472; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_commute:
15473; CHECK:       # %bb.0:
15474; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15475; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
15476; CHECK-NEXT:    ret
15477  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15478  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15479  %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl)
15480  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15481  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
15482  ret <vscale x 4 x double> %v
15483}
15484
15485define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_neg_splat_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15486; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked:
15487; CHECK:       # %bb.0:
15488; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15489; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
15490; CHECK-NEXT:    ret
15491  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15492  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15493  %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15494  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15495  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15496  ret <vscale x 4 x double> %v
15497}
15498
15499define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_neg_splat_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15500; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked_commute:
15501; CHECK:       # %bb.0:
15502; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15503; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
15504; CHECK-NEXT:    ret
15505  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15506  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15507  %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15508  %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15509  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15510  ret <vscale x 4 x double> %v
15511}
15512
15513define <vscale x 4 x double> @vfnmsub_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15514; CHECK-LABEL: vfnmsub_vv_nxv4f64:
15515; CHECK:       # %bb.0:
15516; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15517; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
15518; CHECK-NEXT:    vmv.v.v v8, v12
15519; CHECK-NEXT:    ret
15520  %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl)
15521  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
15522  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
15523  ret <vscale x 4 x double> %v
15524}
15525
15526define <vscale x 4 x double> @vfnmsub_vv_nxv4f64_commuted(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15527; CHECK-LABEL: vfnmsub_vv_nxv4f64_commuted:
15528; CHECK:       # %bb.0:
15529; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15530; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
15531; CHECK-NEXT:    ret
15532  %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl)
15533  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
15534  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
15535  ret <vscale x 4 x double> %v
15536}
15537
15538define <vscale x 4 x double> @vfnmsub_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
15539; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked:
15540; CHECK:       # %bb.0:
15541; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15542; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
15543; CHECK-NEXT:    ret
15544  %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15545  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15546  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15547  ret <vscale x 4 x double> %v
15548}
15549
15550define <vscale x 4 x double> @vfnmsub_vv_nxv4f64_unmasked_commuted(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
15551; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked_commuted:
15552; CHECK:       # %bb.0:
15553; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15554; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
15555; CHECK-NEXT:    ret
15556  %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15557  %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15558  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15559  ret <vscale x 4 x double> %v
15560}
15561
15562define <vscale x 4 x double> @vfnmsub_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15563; CHECK-LABEL: vfnmsub_vf_nxv4f64:
15564; CHECK:       # %bb.0:
15565; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15566; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
15567; CHECK-NEXT:    ret
15568  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15569  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15570  %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl)
15571  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15572  ret <vscale x 4 x double> %v
15573}
15574
15575define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15576; CHECK-LABEL: vfnmsub_vf_nxv4f64_commute:
15577; CHECK:       # %bb.0:
15578; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15579; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
15580; CHECK-NEXT:    ret
15581  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15582  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15583  %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl)
15584  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15585  ret <vscale x 4 x double> %v
15586}
15587
15588define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15589; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked:
15590; CHECK:       # %bb.0:
15591; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15592; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
15593; CHECK-NEXT:    ret
15594  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15595  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15596  %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15597  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15598  ret <vscale x 4 x double> %v
15599}
15600
15601define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15602; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked_commute:
15603; CHECK:       # %bb.0:
15604; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15605; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
15606; CHECK-NEXT:    ret
15607  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15608  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15609  %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15610  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15611  ret <vscale x 4 x double> %v
15612}
15613
15614define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_neg_splat(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15615; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat:
15616; CHECK:       # %bb.0:
15617; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15618; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
15619; CHECK-NEXT:    ret
15620  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15621  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15622  %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl)
15623  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15624  ret <vscale x 4 x double> %v
15625}
15626
15627define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_neg_splat_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) {
15628; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_commute:
15629; CHECK:       # %bb.0:
15630; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15631; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
15632; CHECK-NEXT:    ret
15633  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15634  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15635  %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl)
15636  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
15637  ret <vscale x 4 x double> %v
15638}
15639
15640define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_neg_splat_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15641; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked:
15642; CHECK:       # %bb.0:
15643; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15644; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
15645; CHECK-NEXT:    ret
15646  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15647  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15648  %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15649  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15650  ret <vscale x 4 x double> %v
15651}
15652
15653define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_neg_splat_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) {
15654; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked_commute:
15655; CHECK:       # %bb.0:
15656; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
15657; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
15658; CHECK-NEXT:    ret
15659  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
15660  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
15661  %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15662  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl)
15663  ret <vscale x 4 x double> %v
15664}
15665
15666declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
15667
15668define <vscale x 8 x double> @vfmsub_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15669; CHECK-LABEL: vfmsub_vv_nxv8f64:
15670; CHECK:       # %bb.0:
15671; CHECK-NEXT:    vl8re64.v v24, (a0)
15672; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15673; CHECK-NEXT:    vfmsub.vv v16, v8, v24, v0.t
15674; CHECK-NEXT:    vmv.v.v v8, v16
15675; CHECK-NEXT:    ret
15676  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
15677  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
15678  ret <vscale x 8 x double> %v
15679}
15680
15681define <vscale x 8 x double> @vfmsub_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
15682; CHECK-LABEL: vfmsub_vv_nxv8f64_unmasked:
15683; CHECK:       # %bb.0:
15684; CHECK-NEXT:    vl8re64.v v24, (a0)
15685; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15686; CHECK-NEXT:    vfmsub.vv v8, v16, v24
15687; CHECK-NEXT:    ret
15688  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15689  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15690  ret <vscale x 8 x double> %v
15691}
15692
15693define <vscale x 8 x double> @vfmsub_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15694; CHECK-LABEL: vfmsub_vf_nxv8f64:
15695; CHECK:       # %bb.0:
15696; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15697; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
15698; CHECK-NEXT:    ret
15699  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15700  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15701  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
15702  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
15703  ret <vscale x 8 x double> %v
15704}
15705
15706define <vscale x 8 x double> @vfmsub_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15707; CHECK-LABEL: vfmsub_vf_nxv8f64_commute:
15708; CHECK:       # %bb.0:
15709; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15710; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
15711; CHECK-NEXT:    ret
15712  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15713  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15714  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
15715  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
15716  ret <vscale x 8 x double> %v
15717}
15718
15719define <vscale x 8 x double> @vfmsub_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
15720; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked:
15721; CHECK:       # %bb.0:
15722; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15723; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
15724; CHECK-NEXT:    ret
15725  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15726  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15727  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15728  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15729  ret <vscale x 8 x double> %v
15730}
15731
15732define <vscale x 8 x double> @vfmsub_vf_nxv8f64_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
15733; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked_commute:
15734; CHECK:       # %bb.0:
15735; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15736; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
15737; CHECK-NEXT:    ret
15738  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15739  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15740  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15741  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15742  ret <vscale x 8 x double> %v
15743}
15744
15745define <vscale x 8 x double> @vfnmadd_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15746; CHECK-LABEL: vfnmadd_vv_nxv8f64:
15747; CHECK:       # %bb.0:
15748; CHECK-NEXT:    vl8re64.v v24, (a0)
15749; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15750; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
15751; CHECK-NEXT:    vmv.v.v v8, v16
15752; CHECK-NEXT:    ret
15753  %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl)
15754  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
15755  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
15756  ret <vscale x 8 x double> %v
15757}
15758
15759define <vscale x 8 x double> @vfnmadd_vv_nxv8f64_commuted(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15760; CHECK-LABEL: vfnmadd_vv_nxv8f64_commuted:
15761; CHECK:       # %bb.0:
15762; CHECK-NEXT:    vl8re64.v v24, (a0)
15763; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15764; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
15765; CHECK-NEXT:    ret
15766  %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl)
15767  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
15768  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
15769  ret <vscale x 8 x double> %v
15770}
15771
15772define <vscale x 8 x double> @vfnmadd_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
15773; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked:
15774; CHECK:       # %bb.0:
15775; CHECK-NEXT:    vl8re64.v v24, (a0)
15776; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15777; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
15778; CHECK-NEXT:    ret
15779  %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15780  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15781  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15782  ret <vscale x 8 x double> %v
15783}
15784
15785define <vscale x 8 x double> @vfnmadd_vv_nxv8f64_unmasked_commuted(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
15786; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked_commuted:
15787; CHECK:       # %bb.0:
15788; CHECK-NEXT:    vl8re64.v v24, (a0)
15789; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15790; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
15791; CHECK-NEXT:    ret
15792  %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15793  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15794  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15795  ret <vscale x 8 x double> %v
15796}
15797
15798define <vscale x 8 x double> @vfnmadd_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15799; CHECK-LABEL: vfnmadd_vf_nxv8f64:
15800; CHECK:       # %bb.0:
15801; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15802; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
15803; CHECK-NEXT:    ret
15804  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15805  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15806  %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl)
15807  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
15808  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
15809  ret <vscale x 8 x double> %v
15810}
15811
15812define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15813; CHECK-LABEL: vfnmadd_vf_nxv8f64_commute:
15814; CHECK:       # %bb.0:
15815; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15816; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
15817; CHECK-NEXT:    ret
15818  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15819  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15820  %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl)
15821  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
15822  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
15823  ret <vscale x 8 x double> %v
15824}
15825
15826define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
15827; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked:
15828; CHECK:       # %bb.0:
15829; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15830; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
15831; CHECK-NEXT:    ret
15832  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15833  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15834  %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15835  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15836  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15837  ret <vscale x 8 x double> %v
15838}
15839
15840define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
15841; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked_commute:
15842; CHECK:       # %bb.0:
15843; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15844; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
15845; CHECK-NEXT:    ret
15846  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15847  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15848  %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15849  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15850  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15851  ret <vscale x 8 x double> %v
15852}
15853
15854define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_neg_splat(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15855; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat:
15856; CHECK:       # %bb.0:
15857; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15858; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
15859; CHECK-NEXT:    ret
15860  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15861  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15862  %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl)
15863  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
15864  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
15865  ret <vscale x 8 x double> %v
15866}
15867
15868define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_neg_splat_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15869; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_commute:
15870; CHECK:       # %bb.0:
15871; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15872; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
15873; CHECK-NEXT:    ret
15874  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15875  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15876  %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl)
15877  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
15878  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
15879  ret <vscale x 8 x double> %v
15880}
15881
15882define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_neg_splat_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
15883; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked:
15884; CHECK:       # %bb.0:
15885; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15886; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
15887; CHECK-NEXT:    ret
15888  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15889  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15890  %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15891  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15892  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15893  ret <vscale x 8 x double> %v
15894}
15895
15896define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_neg_splat_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
15897; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked_commute:
15898; CHECK:       # %bb.0:
15899; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15900; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
15901; CHECK-NEXT:    ret
15902  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15903  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15904  %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15905  %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15906  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15907  ret <vscale x 8 x double> %v
15908}
15909
15910define <vscale x 8 x double> @vfnmsub_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15911; CHECK-LABEL: vfnmsub_vv_nxv8f64:
15912; CHECK:       # %bb.0:
15913; CHECK-NEXT:    vl8re64.v v24, (a0)
15914; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15915; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
15916; CHECK-NEXT:    vmv.v.v v8, v16
15917; CHECK-NEXT:    ret
15918  %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl)
15919  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
15920  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
15921  ret <vscale x 8 x double> %v
15922}
15923
15924define <vscale x 8 x double> @vfnmsub_vv_nxv8f64_commuted(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15925; CHECK-LABEL: vfnmsub_vv_nxv8f64_commuted:
15926; CHECK:       # %bb.0:
15927; CHECK-NEXT:    vl8re64.v v24, (a0)
15928; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15929; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
15930; CHECK-NEXT:    ret
15931  %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl)
15932  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
15933  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
15934  ret <vscale x 8 x double> %v
15935}
15936
15937define <vscale x 8 x double> @vfnmsub_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
15938; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked:
15939; CHECK:       # %bb.0:
15940; CHECK-NEXT:    vl8re64.v v24, (a0)
15941; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15942; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
15943; CHECK-NEXT:    ret
15944  %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15945  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15946  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15947  ret <vscale x 8 x double> %v
15948}
15949
15950define <vscale x 8 x double> @vfnmsub_vv_nxv8f64_unmasked_commuted(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
15951; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked_commuted:
15952; CHECK:       # %bb.0:
15953; CHECK-NEXT:    vl8re64.v v24, (a0)
15954; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
15955; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
15956; CHECK-NEXT:    ret
15957  %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15958  %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15959  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15960  ret <vscale x 8 x double> %v
15961}
15962
15963define <vscale x 8 x double> @vfnmsub_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15964; CHECK-LABEL: vfnmsub_vf_nxv8f64:
15965; CHECK:       # %bb.0:
15966; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15967; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
15968; CHECK-NEXT:    ret
15969  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15970  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15971  %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl)
15972  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
15973  ret <vscale x 8 x double> %v
15974}
15975
15976define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
15977; CHECK-LABEL: vfnmsub_vf_nxv8f64_commute:
15978; CHECK:       # %bb.0:
15979; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15980; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
15981; CHECK-NEXT:    ret
15982  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15983  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15984  %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl)
15985  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
15986  ret <vscale x 8 x double> %v
15987}
15988
15989define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
15990; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked:
15991; CHECK:       # %bb.0:
15992; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
15993; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
15994; CHECK-NEXT:    ret
15995  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
15996  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
15997  %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15998  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
15999  ret <vscale x 8 x double> %v
16000}
16001
16002define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
16003; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked_commute:
16004; CHECK:       # %bb.0:
16005; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
16006; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
16007; CHECK-NEXT:    ret
16008  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
16009  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
16010  %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
16011  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
16012  ret <vscale x 8 x double> %v
16013}
16014
16015define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_neg_splat(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
16016; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat:
16017; CHECK:       # %bb.0:
16018; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
16019; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
16020; CHECK-NEXT:    ret
16021  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
16022  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
16023  %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl)
16024  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
16025  ret <vscale x 8 x double> %v
16026}
16027
16028define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_neg_splat_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) {
16029; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_commute:
16030; CHECK:       # %bb.0:
16031; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
16032; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
16033; CHECK-NEXT:    ret
16034  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
16035  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
16036  %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl)
16037  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
16038  ret <vscale x 8 x double> %v
16039}
16040
16041define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_neg_splat_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
16042; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked:
16043; CHECK:       # %bb.0:
16044; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
16045; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
16046; CHECK-NEXT:    ret
16047  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
16048  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
16049  %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
16050  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
16051  ret <vscale x 8 x double> %v
16052}
16053
16054define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_neg_splat_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) {
16055; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked_commute:
16056; CHECK:       # %bb.0:
16057; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
16058; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
16059; CHECK-NEXT:    ret
16060  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
16061  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
16062  %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
16063  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl)
16064  ret <vscale x 8 x double> %v
16065}
16066
16067define <vscale x 1 x half> @vfma_vv_nxv1f16_double_neg(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
16068; ZVFH-LABEL: vfma_vv_nxv1f16_double_neg:
16069; ZVFH:       # %bb.0:
16070; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
16071; ZVFH-NEXT:    vfmadd.vv v9, v8, v10, v0.t
16072; ZVFH-NEXT:    vmv1r.v v8, v9
16073; ZVFH-NEXT:    ret
16074;
16075; ZVFHMIN-LABEL: vfma_vv_nxv1f16_double_neg:
16076; ZVFHMIN:       # %bb.0:
16077; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
16078; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t
16079; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
16080; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
16081; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
16082; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11, v0.t
16083; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
16084; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t
16085; ZVFHMIN-NEXT:    ret
16086  %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)
16087  %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
16088  %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %nega, <vscale x 1 x half> %negb, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
16089  ret <vscale x 1 x half> %v
16090}
16091