xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vfmuladd-vp.ll (revision b6c0f1bfa79a3a32d841ac5ab1f94c3aee3b5d90)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+m -target-abi=ilp32d \
3; RUN:     -verify-machineinstrs < %s | FileCheck %s
4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+m -target-abi=lp64d \
5; RUN:     -verify-machineinstrs < %s | FileCheck %s
6
7declare <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32)
8
9define <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) {
10; CHECK-LABEL: vfma_vv_nxv1f16:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
13; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
14; CHECK-NEXT:    vmv1r.v v8, v9
15; CHECK-NEXT:    ret
16  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
17  ret <vscale x 1 x half> %v
18}
19
20define <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) {
21; CHECK-LABEL: vfma_vv_nxv1f16_unmasked:
22; CHECK:       # %bb.0:
23; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
24; CHECK-NEXT:    vfmadd.vv v8, v9, v10
25; CHECK-NEXT:    ret
26  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
27  ret <vscale x 1 x half> %v
28}
29
30define <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) {
31; CHECK-LABEL: vfma_vf_nxv1f16:
32; CHECK:       # %bb.0:
33; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
34; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
35; CHECK-NEXT:    ret
36  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
37  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
38  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
39  ret <vscale x 1 x half> %v
40}
41
42define <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) {
43; CHECK-LABEL: vfma_vf_nxv1f16_commute:
44; CHECK:       # %bb.0:
45; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
46; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
47; CHECK-NEXT:    ret
48  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
49  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
50  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
51  ret <vscale x 1 x half> %v
52}
53
54define <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) {
55; CHECK-LABEL: vfma_vf_nxv1f16_unmasked:
56; CHECK:       # %bb.0:
57; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
58; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
59; CHECK-NEXT:    ret
60  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
61  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
62  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
63  ret <vscale x 1 x half> %v
64}
65
66define <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) {
67; CHECK-LABEL: vfma_vf_nxv1f16_unmasked_commute:
68; CHECK:       # %bb.0:
69; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
70; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
71; CHECK-NEXT:    ret
72  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
73  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
74  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
75  ret <vscale x 1 x half> %v
76}
77
78declare <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32)
79
80define <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) {
81; CHECK-LABEL: vfma_vv_nxv2f16:
82; CHECK:       # %bb.0:
83; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
84; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
85; CHECK-NEXT:    vmv1r.v v8, v9
86; CHECK-NEXT:    ret
87  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
88  ret <vscale x 2 x half> %v
89}
90
91define <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) {
92; CHECK-LABEL: vfma_vv_nxv2f16_unmasked:
93; CHECK:       # %bb.0:
94; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
95; CHECK-NEXT:    vfmadd.vv v8, v9, v10
96; CHECK-NEXT:    ret
97  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
98  ret <vscale x 2 x half> %v
99}
100
101define <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) {
102; CHECK-LABEL: vfma_vf_nxv2f16:
103; CHECK:       # %bb.0:
104; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
105; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
106; CHECK-NEXT:    ret
107  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
108  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
109  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
110  ret <vscale x 2 x half> %v
111}
112
113define <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) {
114; CHECK-LABEL: vfma_vf_nxv2f16_commute:
115; CHECK:       # %bb.0:
116; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
117; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
118; CHECK-NEXT:    ret
119  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
120  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
121  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
122  ret <vscale x 2 x half> %v
123}
124
125define <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) {
126; CHECK-LABEL: vfma_vf_nxv2f16_unmasked:
127; CHECK:       # %bb.0:
128; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
129; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
130; CHECK-NEXT:    ret
131  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
132  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
133  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
134  ret <vscale x 2 x half> %v
135}
136
137define <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) {
138; CHECK-LABEL: vfma_vf_nxv2f16_unmasked_commute:
139; CHECK:       # %bb.0:
140; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
141; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
142; CHECK-NEXT:    ret
143  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
144  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
145  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
146  ret <vscale x 2 x half> %v
147}
148
149declare <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32)
150
151define <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) {
152; CHECK-LABEL: vfma_vv_nxv4f16:
153; CHECK:       # %bb.0:
154; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
155; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
156; CHECK-NEXT:    vmv.v.v v8, v9
157; CHECK-NEXT:    ret
158  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
159  ret <vscale x 4 x half> %v
160}
161
162define <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) {
163; CHECK-LABEL: vfma_vv_nxv4f16_unmasked:
164; CHECK:       # %bb.0:
165; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
166; CHECK-NEXT:    vfmadd.vv v8, v9, v10
167; CHECK-NEXT:    ret
168  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
169  ret <vscale x 4 x half> %v
170}
171
172define <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) {
173; CHECK-LABEL: vfma_vf_nxv4f16:
174; CHECK:       # %bb.0:
175; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
176; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
177; CHECK-NEXT:    ret
178  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
179  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
180  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
181  ret <vscale x 4 x half> %v
182}
183
184define <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) {
185; CHECK-LABEL: vfma_vf_nxv4f16_commute:
186; CHECK:       # %bb.0:
187; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
188; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
189; CHECK-NEXT:    ret
190  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
191  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
192  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
193  ret <vscale x 4 x half> %v
194}
195
196define <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) {
197; CHECK-LABEL: vfma_vf_nxv4f16_unmasked:
198; CHECK:       # %bb.0:
199; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
200; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
201; CHECK-NEXT:    ret
202  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
203  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
204  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
205  ret <vscale x 4 x half> %v
206}
207
208define <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) {
209; CHECK-LABEL: vfma_vf_nxv4f16_unmasked_commute:
210; CHECK:       # %bb.0:
211; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
212; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
213; CHECK-NEXT:    ret
214  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
215  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
216  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
217  ret <vscale x 4 x half> %v
218}
219
220declare <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32)
221
222define <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) {
223; CHECK-LABEL: vfma_vv_nxv8f16:
224; CHECK:       # %bb.0:
225; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
226; CHECK-NEXT:    vfmadd.vv v10, v8, v12, v0.t
227; CHECK-NEXT:    vmv.v.v v8, v10
228; CHECK-NEXT:    ret
229  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
230  ret <vscale x 8 x half> %v
231}
232
233define <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) {
234; CHECK-LABEL: vfma_vv_nxv8f16_unmasked:
235; CHECK:       # %bb.0:
236; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
237; CHECK-NEXT:    vfmadd.vv v8, v10, v12
238; CHECK-NEXT:    ret
239  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
240  ret <vscale x 8 x half> %v
241}
242
243define <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) {
244; CHECK-LABEL: vfma_vf_nxv8f16:
245; CHECK:       # %bb.0:
246; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
247; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
248; CHECK-NEXT:    ret
249  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
250  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
251  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
252  ret <vscale x 8 x half> %v
253}
254
255define <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) {
256; CHECK-LABEL: vfma_vf_nxv8f16_commute:
257; CHECK:       # %bb.0:
258; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
259; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
260; CHECK-NEXT:    ret
261  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
262  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
263  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
264  ret <vscale x 8 x half> %v
265}
266
267define <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) {
268; CHECK-LABEL: vfma_vf_nxv8f16_unmasked:
269; CHECK:       # %bb.0:
270; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
271; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
272; CHECK-NEXT:    ret
273  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
274  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
275  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
276  ret <vscale x 8 x half> %v
277}
278
279define <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) {
280; CHECK-LABEL: vfma_vf_nxv8f16_unmasked_commute:
281; CHECK:       # %bb.0:
282; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
283; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
284; CHECK-NEXT:    ret
285  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
286  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
287  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
288  ret <vscale x 8 x half> %v
289}
290
291declare <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32)
292
293define <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) {
294; CHECK-LABEL: vfma_vv_nxv16f16:
295; CHECK:       # %bb.0:
296; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
297; CHECK-NEXT:    vfmadd.vv v12, v8, v16, v0.t
298; CHECK-NEXT:    vmv.v.v v8, v12
299; CHECK-NEXT:    ret
300  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
301  ret <vscale x 16 x half> %v
302}
303
304define <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) {
305; CHECK-LABEL: vfma_vv_nxv16f16_unmasked:
306; CHECK:       # %bb.0:
307; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
308; CHECK-NEXT:    vfmadd.vv v8, v12, v16
309; CHECK-NEXT:    ret
310  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
311  ret <vscale x 16 x half> %v
312}
313
314define <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) {
315; CHECK-LABEL: vfma_vf_nxv16f16:
316; CHECK:       # %bb.0:
317; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
318; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
319; CHECK-NEXT:    ret
320  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
321  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
322  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
323  ret <vscale x 16 x half> %v
324}
325
326define <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) {
327; CHECK-LABEL: vfma_vf_nxv16f16_commute:
328; CHECK:       # %bb.0:
329; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
330; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
331; CHECK-NEXT:    ret
332  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
333  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
334  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
335  ret <vscale x 16 x half> %v
336}
337
338define <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) {
339; CHECK-LABEL: vfma_vf_nxv16f16_unmasked:
340; CHECK:       # %bb.0:
341; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
342; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
343; CHECK-NEXT:    ret
344  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
345  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
346  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
347  ret <vscale x 16 x half> %v
348}
349
350define <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) {
351; CHECK-LABEL: vfma_vf_nxv16f16_unmasked_commute:
352; CHECK:       # %bb.0:
353; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
354; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
355; CHECK-NEXT:    ret
356  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
357  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
358  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
359  ret <vscale x 16 x half> %v
360}
361
362declare <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32)
363
364define <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) {
365; CHECK-LABEL: vfma_vv_nxv32f16:
366; CHECK:       # %bb.0:
367; CHECK-NEXT:    vl8re16.v v24, (a0)
368; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
369; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t
370; CHECK-NEXT:    vmv.v.v v8, v16
371; CHECK-NEXT:    ret
372  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
373  ret <vscale x 32 x half> %v
374}
375
376define <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) {
377; CHECK-LABEL: vfma_vv_nxv32f16_unmasked:
378; CHECK:       # %bb.0:
379; CHECK-NEXT:    vl8re16.v v24, (a0)
380; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
381; CHECK-NEXT:    vfmadd.vv v8, v16, v24
382; CHECK-NEXT:    ret
383  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
384  ret <vscale x 32 x half> %v
385}
386
387define <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) {
388; CHECK-LABEL: vfma_vf_nxv32f16:
389; CHECK:       # %bb.0:
390; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
391; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
392; CHECK-NEXT:    ret
393  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
394  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
395  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
396  ret <vscale x 32 x half> %v
397}
398
399define <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) {
400; CHECK-LABEL: vfma_vf_nxv32f16_commute:
401; CHECK:       # %bb.0:
402; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
403; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
404; CHECK-NEXT:    ret
405  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
406  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
407  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
408  ret <vscale x 32 x half> %v
409}
410
411define <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) {
412; CHECK-LABEL: vfma_vf_nxv32f16_unmasked:
413; CHECK:       # %bb.0:
414; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
415; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
416; CHECK-NEXT:    ret
417  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
418  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
419  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
420  ret <vscale x 32 x half> %v
421}
422
423define <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) {
424; CHECK-LABEL: vfma_vf_nxv32f16_unmasked_commute:
425; CHECK:       # %bb.0:
426; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
427; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
428; CHECK-NEXT:    ret
429  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
430  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
431  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
432  ret <vscale x 32 x half> %v
433}
434
435declare <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32)
436
437define <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) {
438; CHECK-LABEL: vfma_vv_nxv1f32:
439; CHECK:       # %bb.0:
440; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
441; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
442; CHECK-NEXT:    vmv1r.v v8, v9
443; CHECK-NEXT:    ret
444  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
445  ret <vscale x 1 x float> %v
446}
447
448define <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) {
449; CHECK-LABEL: vfma_vv_nxv1f32_unmasked:
450; CHECK:       # %bb.0:
451; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
452; CHECK-NEXT:    vfmadd.vv v8, v9, v10
453; CHECK-NEXT:    ret
454  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
455  ret <vscale x 1 x float> %v
456}
457
458define <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) {
459; CHECK-LABEL: vfma_vf_nxv1f32:
460; CHECK:       # %bb.0:
461; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
462; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
463; CHECK-NEXT:    ret
464  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
465  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
466  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
467  ret <vscale x 1 x float> %v
468}
469
470define <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) {
471; CHECK-LABEL: vfma_vf_nxv1f32_commute:
472; CHECK:       # %bb.0:
473; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
474; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
475; CHECK-NEXT:    ret
476  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
477  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
478  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
479  ret <vscale x 1 x float> %v
480}
481
482define <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) {
483; CHECK-LABEL: vfma_vf_nxv1f32_unmasked:
484; CHECK:       # %bb.0:
485; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
486; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
487; CHECK-NEXT:    ret
488  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
489  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
490  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
491  ret <vscale x 1 x float> %v
492}
493
494define <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) {
495; CHECK-LABEL: vfma_vf_nxv1f32_unmasked_commute:
496; CHECK:       # %bb.0:
497; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
498; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
499; CHECK-NEXT:    ret
500  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
501  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
502  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
503  ret <vscale x 1 x float> %v
504}
505
506declare <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32)
507
508define <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) {
509; CHECK-LABEL: vfma_vv_nxv2f32:
510; CHECK:       # %bb.0:
511; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
512; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
513; CHECK-NEXT:    vmv.v.v v8, v9
514; CHECK-NEXT:    ret
515  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
516  ret <vscale x 2 x float> %v
517}
518
519define <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) {
520; CHECK-LABEL: vfma_vv_nxv2f32_unmasked:
521; CHECK:       # %bb.0:
522; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
523; CHECK-NEXT:    vfmadd.vv v8, v9, v10
524; CHECK-NEXT:    ret
525  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
526  ret <vscale x 2 x float> %v
527}
528
529define <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) {
530; CHECK-LABEL: vfma_vf_nxv2f32:
531; CHECK:       # %bb.0:
532; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
533; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
534; CHECK-NEXT:    ret
535  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
536  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
537  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
538  ret <vscale x 2 x float> %v
539}
540
541define <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) {
542; CHECK-LABEL: vfma_vf_nxv2f32_commute:
543; CHECK:       # %bb.0:
544; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
545; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
546; CHECK-NEXT:    ret
547  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
548  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
549  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
550  ret <vscale x 2 x float> %v
551}
552
553define <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) {
554; CHECK-LABEL: vfma_vf_nxv2f32_unmasked:
555; CHECK:       # %bb.0:
556; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
557; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
558; CHECK-NEXT:    ret
559  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
560  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
561  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
562  ret <vscale x 2 x float> %v
563}
564
565define <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) {
566; CHECK-LABEL: vfma_vf_nxv2f32_unmasked_commute:
567; CHECK:       # %bb.0:
568; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
569; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
570; CHECK-NEXT:    ret
571  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
572  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
573  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
574  ret <vscale x 2 x float> %v
575}
576
577declare <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32)
578
579define <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) {
580; CHECK-LABEL: vfma_vv_nxv4f32:
581; CHECK:       # %bb.0:
582; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
583; CHECK-NEXT:    vfmadd.vv v10, v8, v12, v0.t
584; CHECK-NEXT:    vmv.v.v v8, v10
585; CHECK-NEXT:    ret
586  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
587  ret <vscale x 4 x float> %v
588}
589
590define <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) {
591; CHECK-LABEL: vfma_vv_nxv4f32_unmasked:
592; CHECK:       # %bb.0:
593; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
594; CHECK-NEXT:    vfmadd.vv v8, v10, v12
595; CHECK-NEXT:    ret
596  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
597  ret <vscale x 4 x float> %v
598}
599
600define <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) {
601; CHECK-LABEL: vfma_vf_nxv4f32:
602; CHECK:       # %bb.0:
603; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
604; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
605; CHECK-NEXT:    ret
606  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
607  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
608  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
609  ret <vscale x 4 x float> %v
610}
611
612define <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) {
613; CHECK-LABEL: vfma_vf_nxv4f32_commute:
614; CHECK:       # %bb.0:
615; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
616; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
617; CHECK-NEXT:    ret
618  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
619  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
620  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
621  ret <vscale x 4 x float> %v
622}
623
624define <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) {
625; CHECK-LABEL: vfma_vf_nxv4f32_unmasked:
626; CHECK:       # %bb.0:
627; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
628; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
629; CHECK-NEXT:    ret
630  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
631  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
632  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
633  ret <vscale x 4 x float> %v
634}
635
636define <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) {
637; CHECK-LABEL: vfma_vf_nxv4f32_unmasked_commute:
638; CHECK:       # %bb.0:
639; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
640; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
641; CHECK-NEXT:    ret
642  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
643  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
644  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
645  ret <vscale x 4 x float> %v
646}
647
648declare <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32)
649
650define <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) {
651; CHECK-LABEL: vfma_vv_nxv8f32:
652; CHECK:       # %bb.0:
653; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
654; CHECK-NEXT:    vfmadd.vv v12, v8, v16, v0.t
655; CHECK-NEXT:    vmv.v.v v8, v12
656; CHECK-NEXT:    ret
657  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
658  ret <vscale x 8 x float> %v
659}
660
661define <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) {
662; CHECK-LABEL: vfma_vv_nxv8f32_unmasked:
663; CHECK:       # %bb.0:
664; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
665; CHECK-NEXT:    vfmadd.vv v8, v12, v16
666; CHECK-NEXT:    ret
667  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
668  ret <vscale x 8 x float> %v
669}
670
671define <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) {
672; CHECK-LABEL: vfma_vf_nxv8f32:
673; CHECK:       # %bb.0:
674; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
675; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
676; CHECK-NEXT:    ret
677  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
678  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
679  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
680  ret <vscale x 8 x float> %v
681}
682
683define <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) {
684; CHECK-LABEL: vfma_vf_nxv8f32_commute:
685; CHECK:       # %bb.0:
686; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
687; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
688; CHECK-NEXT:    ret
689  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
690  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
691  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
692  ret <vscale x 8 x float> %v
693}
694
695define <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) {
696; CHECK-LABEL: vfma_vf_nxv8f32_unmasked:
697; CHECK:       # %bb.0:
698; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
699; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
700; CHECK-NEXT:    ret
701  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
702  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
703  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
704  ret <vscale x 8 x float> %v
705}
706
707define <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) {
708; CHECK-LABEL: vfma_vf_nxv8f32_unmasked_commute:
709; CHECK:       # %bb.0:
710; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
711; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
712; CHECK-NEXT:    ret
713  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
714  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
715  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
716  ret <vscale x 8 x float> %v
717}
718
719declare <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32)
720
721define <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) {
722; CHECK-LABEL: vfma_vv_nxv16f32:
723; CHECK:       # %bb.0:
724; CHECK-NEXT:    vl8re32.v v24, (a0)
725; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
726; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t
727; CHECK-NEXT:    vmv.v.v v8, v16
728; CHECK-NEXT:    ret
729  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
730  ret <vscale x 16 x float> %v
731}
732
733define <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) {
734; CHECK-LABEL: vfma_vv_nxv16f32_unmasked:
735; CHECK:       # %bb.0:
736; CHECK-NEXT:    vl8re32.v v24, (a0)
737; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
738; CHECK-NEXT:    vfmadd.vv v8, v16, v24
739; CHECK-NEXT:    ret
740  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
741  ret <vscale x 16 x float> %v
742}
743
744define <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) {
745; CHECK-LABEL: vfma_vf_nxv16f32:
746; CHECK:       # %bb.0:
747; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
748; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
749; CHECK-NEXT:    ret
750  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
751  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
752  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
753  ret <vscale x 16 x float> %v
754}
755
756define <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) {
757; CHECK-LABEL: vfma_vf_nxv16f32_commute:
758; CHECK:       # %bb.0:
759; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
760; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
761; CHECK-NEXT:    ret
762  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
763  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
764  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
765  ret <vscale x 16 x float> %v
766}
767
768define <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) {
769; CHECK-LABEL: vfma_vf_nxv16f32_unmasked:
770; CHECK:       # %bb.0:
771; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
772; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
773; CHECK-NEXT:    ret
774  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
775  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
776  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
777  ret <vscale x 16 x float> %v
778}
779
780define <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) {
781; CHECK-LABEL: vfma_vf_nxv16f32_unmasked_commute:
782; CHECK:       # %bb.0:
783; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
784; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
785; CHECK-NEXT:    ret
786  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
787  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
788  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
789  ret <vscale x 16 x float> %v
790}
791
792declare <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32)
793
794define <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) {
795; CHECK-LABEL: vfma_vv_nxv1f64:
796; CHECK:       # %bb.0:
797; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
798; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
799; CHECK-NEXT:    vmv.v.v v8, v9
800; CHECK-NEXT:    ret
801  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
802  ret <vscale x 1 x double> %v
803}
804
805define <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) {
806; CHECK-LABEL: vfma_vv_nxv1f64_unmasked:
807; CHECK:       # %bb.0:
808; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
809; CHECK-NEXT:    vfmadd.vv v8, v9, v10
810; CHECK-NEXT:    ret
811  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
812  ret <vscale x 1 x double> %v
813}
814
815define <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) {
816; CHECK-LABEL: vfma_vf_nxv1f64:
817; CHECK:       # %bb.0:
818; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
819; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
820; CHECK-NEXT:    ret
821  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
822  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
823  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
824  ret <vscale x 1 x double> %v
825}
826
827define <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) {
828; CHECK-LABEL: vfma_vf_nxv1f64_commute:
829; CHECK:       # %bb.0:
830; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
831; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
832; CHECK-NEXT:    ret
833  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
834  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
835  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
836  ret <vscale x 1 x double> %v
837}
838
839define <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) {
840; CHECK-LABEL: vfma_vf_nxv1f64_unmasked:
841; CHECK:       # %bb.0:
842; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
843; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
844; CHECK-NEXT:    ret
845  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
846  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
847  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
848  ret <vscale x 1 x double> %v
849}
850
851define <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) {
852; CHECK-LABEL: vfma_vf_nxv1f64_unmasked_commute:
853; CHECK:       # %bb.0:
854; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
855; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
856; CHECK-NEXT:    ret
857  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
858  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
859  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
860  ret <vscale x 1 x double> %v
861}
862
863declare <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32)
864
865define <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) {
866; CHECK-LABEL: vfma_vv_nxv2f64:
867; CHECK:       # %bb.0:
868; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
869; CHECK-NEXT:    vfmadd.vv v10, v8, v12, v0.t
870; CHECK-NEXT:    vmv.v.v v8, v10
871; CHECK-NEXT:    ret
872  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
873  ret <vscale x 2 x double> %v
874}
875
876define <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) {
877; CHECK-LABEL: vfma_vv_nxv2f64_unmasked:
878; CHECK:       # %bb.0:
879; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
880; CHECK-NEXT:    vfmadd.vv v8, v10, v12
881; CHECK-NEXT:    ret
882  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
883  ret <vscale x 2 x double> %v
884}
885
886define <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) {
887; CHECK-LABEL: vfma_vf_nxv2f64:
888; CHECK:       # %bb.0:
889; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
890; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
891; CHECK-NEXT:    ret
892  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
893  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
894  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
895  ret <vscale x 2 x double> %v
896}
897
898define <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) {
899; CHECK-LABEL: vfma_vf_nxv2f64_commute:
900; CHECK:       # %bb.0:
901; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
902; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
903; CHECK-NEXT:    ret
904  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
905  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
906  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
907  ret <vscale x 2 x double> %v
908}
909
910define <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) {
911; CHECK-LABEL: vfma_vf_nxv2f64_unmasked:
912; CHECK:       # %bb.0:
913; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
914; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
915; CHECK-NEXT:    ret
916  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
917  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
918  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
919  ret <vscale x 2 x double> %v
920}
921
922define <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) {
923; CHECK-LABEL: vfma_vf_nxv2f64_unmasked_commute:
924; CHECK:       # %bb.0:
925; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
926; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
927; CHECK-NEXT:    ret
928  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
929  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
930  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
931  ret <vscale x 2 x double> %v
932}
933
934declare <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32)
935
936define <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) {
937; CHECK-LABEL: vfma_vv_nxv4f64:
938; CHECK:       # %bb.0:
939; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
940; CHECK-NEXT:    vfmadd.vv v12, v8, v16, v0.t
941; CHECK-NEXT:    vmv.v.v v8, v12
942; CHECK-NEXT:    ret
943  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
944  ret <vscale x 4 x double> %v
945}
946
947define <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) {
948; CHECK-LABEL: vfma_vv_nxv4f64_unmasked:
949; CHECK:       # %bb.0:
950; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
951; CHECK-NEXT:    vfmadd.vv v8, v12, v16
952; CHECK-NEXT:    ret
953  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
954  ret <vscale x 4 x double> %v
955}
956
957define <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) {
958; CHECK-LABEL: vfma_vf_nxv4f64:
959; CHECK:       # %bb.0:
960; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
961; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
962; CHECK-NEXT:    ret
963  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
964  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
965  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
966  ret <vscale x 4 x double> %v
967}
968
969define <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) {
970; CHECK-LABEL: vfma_vf_nxv4f64_commute:
971; CHECK:       # %bb.0:
972; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
973; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
974; CHECK-NEXT:    ret
975  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
976  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
977  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
978  ret <vscale x 4 x double> %v
979}
980
981define <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) {
982; CHECK-LABEL: vfma_vf_nxv4f64_unmasked:
983; CHECK:       # %bb.0:
984; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
985; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
986; CHECK-NEXT:    ret
987  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
988  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
989  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
990  ret <vscale x 4 x double> %v
991}
992
993define <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) {
994; CHECK-LABEL: vfma_vf_nxv4f64_unmasked_commute:
995; CHECK:       # %bb.0:
996; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
997; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
998; CHECK-NEXT:    ret
999  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1000  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1001  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
1002  ret <vscale x 4 x double> %v
1003}
1004
1005declare <vscale x 7 x double> @llvm.vp.fmuladd.nxv7f64(<vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x i1>, i32)
1006
1007define <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) {
1008; CHECK-LABEL: vfma_vv_nxv7f64:
1009; CHECK:       # %bb.0:
1010; CHECK-NEXT:    vl8re64.v v24, (a0)
1011; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1012; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t
1013; CHECK-NEXT:    vmv.v.v v8, v16
1014; CHECK-NEXT:    ret
1015  %v = call <vscale x 7 x double> @llvm.vp.fmuladd.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)
1016  ret <vscale x 7 x double> %v
1017}
1018
1019define <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) {
1020; CHECK-LABEL: vfma_vv_nxv7f64_unmasked:
1021; CHECK:       # %bb.0:
1022; CHECK-NEXT:    vl8re64.v v24, (a0)
1023; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1024; CHECK-NEXT:    vfmadd.vv v8, v16, v24
1025; CHECK-NEXT:    ret
1026  %v = call <vscale x 7 x double> @llvm.vp.fmuladd.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)
1027  ret <vscale x 7 x double> %v
1028}
1029
1030declare <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32)
1031
1032define <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) {
1033; CHECK-LABEL: vfma_vv_nxv8f64:
1034; CHECK:       # %bb.0:
1035; CHECK-NEXT:    vl8re64.v v24, (a0)
1036; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1037; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t
1038; CHECK-NEXT:    vmv.v.v v8, v16
1039; CHECK-NEXT:    ret
1040  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
1041  ret <vscale x 8 x double> %v
1042}
1043
1044define <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) {
1045; CHECK-LABEL: vfma_vv_nxv8f64_unmasked:
1046; CHECK:       # %bb.0:
1047; CHECK-NEXT:    vl8re64.v v24, (a0)
1048; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1049; CHECK-NEXT:    vfmadd.vv v8, v16, v24
1050; CHECK-NEXT:    ret
1051  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
1052  ret <vscale x 8 x double> %v
1053}
1054
1055define <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) {
1056; CHECK-LABEL: vfma_vf_nxv8f64:
1057; CHECK:       # %bb.0:
1058; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1059; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
1060; CHECK-NEXT:    ret
1061  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1062  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1063  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
1064  ret <vscale x 8 x double> %v
1065}
1066
1067define <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) {
1068; CHECK-LABEL: vfma_vf_nxv8f64_commute:
1069; CHECK:       # %bb.0:
1070; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1071; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
1072; CHECK-NEXT:    ret
1073  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1074  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1075  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
1076  ret <vscale x 8 x double> %v
1077}
1078
1079define <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) {
1080; CHECK-LABEL: vfma_vf_nxv8f64_unmasked:
1081; CHECK:       # %bb.0:
1082; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1083; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
1084; CHECK-NEXT:    ret
1085  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1086  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1087  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
1088  ret <vscale x 8 x double> %v
1089}
1090
1091define <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) {
1092; CHECK-LABEL: vfma_vf_nxv8f64_unmasked_commute:
1093; CHECK:       # %bb.0:
1094; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1095; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
1096; CHECK-NEXT:    ret
1097  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1098  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1099  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
1100  ret <vscale x 8 x double> %v
1101}
1102
1103declare <vscale x 16 x double> @llvm.vp.fmuladd.nxv16f64(<vscale x 16 x double>, <vscale x 16 x double>, <vscale x 16 x double>, <vscale x 16 x i1>, i32)
1104
1105define <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) {
1106; CHECK-LABEL: vfma_vv_nxv16f64:
1107; CHECK:       # %bb.0:
1108; CHECK-NEXT:    addi sp, sp, -16
1109; CHECK-NEXT:    .cfi_def_cfa_offset 16
1110; CHECK-NEXT:    csrr a1, vlenb
1111; CHECK-NEXT:    li a3, 48
1112; CHECK-NEXT:    mul a1, a1, a3
1113; CHECK-NEXT:    sub sp, sp, a1
1114; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x30, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 48 * vlenb
1115; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
1116; CHECK-NEXT:    vmv1r.v v7, v0
1117; CHECK-NEXT:    csrr a1, vlenb
1118; CHECK-NEXT:    li a3, 24
1119; CHECK-NEXT:    mul a1, a1, a3
1120; CHECK-NEXT:    add a1, sp, a1
1121; CHECK-NEXT:    addi a1, a1, 16
1122; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
1123; CHECK-NEXT:    csrr a1, vlenb
1124; CHECK-NEXT:    slli a1, a1, 5
1125; CHECK-NEXT:    add a1, sp, a1
1126; CHECK-NEXT:    addi a1, a1, 16
1127; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
1128; CHECK-NEXT:    csrr a1, vlenb
1129; CHECK-NEXT:    srli a3, a1, 3
1130; CHECK-NEXT:    slli a5, a1, 3
1131; CHECK-NEXT:    sub a6, a4, a1
1132; CHECK-NEXT:    add a7, a2, a5
1133; CHECK-NEXT:    add a5, a0, a5
1134; CHECK-NEXT:    vl8re64.v v8, (a7)
1135; CHECK-NEXT:    csrr a7, vlenb
1136; CHECK-NEXT:    slli a7, a7, 3
1137; CHECK-NEXT:    add a7, sp, a7
1138; CHECK-NEXT:    addi a7, a7, 16
1139; CHECK-NEXT:    vs8r.v v8, (a7) # Unknown-size Folded Spill
1140; CHECK-NEXT:    sltu a7, a4, a6
1141; CHECK-NEXT:    addi a7, a7, -1
1142; CHECK-NEXT:    vl8re64.v v8, (a5)
1143; CHECK-NEXT:    csrr a5, vlenb
1144; CHECK-NEXT:    li t0, 40
1145; CHECK-NEXT:    mul a5, a5, t0
1146; CHECK-NEXT:    add a5, sp, a5
1147; CHECK-NEXT:    addi a5, a5, 16
1148; CHECK-NEXT:    vs8r.v v8, (a5) # Unknown-size Folded Spill
1149; CHECK-NEXT:    vl8re64.v v8, (a2)
1150; CHECK-NEXT:    csrr a2, vlenb
1151; CHECK-NEXT:    slli a2, a2, 4
1152; CHECK-NEXT:    add a2, sp, a2
1153; CHECK-NEXT:    addi a2, a2, 16
1154; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1155; CHECK-NEXT:    vl8re64.v v8, (a0)
1156; CHECK-NEXT:    addi a0, sp, 16
1157; CHECK-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
1158; CHECK-NEXT:    vslidedown.vx v0, v0, a3
1159; CHECK-NEXT:    and a0, a7, a6
1160; CHECK-NEXT:    csrr a2, vlenb
1161; CHECK-NEXT:    li a3, 24
1162; CHECK-NEXT:    mul a2, a2, a3
1163; CHECK-NEXT:    add a2, sp, a2
1164; CHECK-NEXT:    addi a2, a2, 16
1165; CHECK-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
1166; CHECK-NEXT:    csrr a2, vlenb
1167; CHECK-NEXT:    slli a2, a2, 3
1168; CHECK-NEXT:    add a2, sp, a2
1169; CHECK-NEXT:    addi a2, a2, 16
1170; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
1171; CHECK-NEXT:    csrr a2, vlenb
1172; CHECK-NEXT:    li a3, 40
1173; CHECK-NEXT:    mul a2, a2, a3
1174; CHECK-NEXT:    add a2, sp, a2
1175; CHECK-NEXT:    addi a2, a2, 16
1176; CHECK-NEXT:    vl8r.v v8, (a2) # Unknown-size Folded Reload
1177; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1178; CHECK-NEXT:    vfmadd.vv v8, v24, v16, v0.t
1179; CHECK-NEXT:    csrr a0, vlenb
1180; CHECK-NEXT:    li a2, 40
1181; CHECK-NEXT:    mul a0, a0, a2
1182; CHECK-NEXT:    add a0, sp, a0
1183; CHECK-NEXT:    addi a0, a0, 16
1184; CHECK-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
1185; CHECK-NEXT:    bltu a4, a1, .LBB92_2
1186; CHECK-NEXT:  # %bb.1:
1187; CHECK-NEXT:    mv a4, a1
1188; CHECK-NEXT:  .LBB92_2:
1189; CHECK-NEXT:    vmv1r.v v0, v7
1190; CHECK-NEXT:    csrr a0, vlenb
1191; CHECK-NEXT:    slli a0, a0, 5
1192; CHECK-NEXT:    add a0, sp, a0
1193; CHECK-NEXT:    addi a0, a0, 16
1194; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1195; CHECK-NEXT:    csrr a0, vlenb
1196; CHECK-NEXT:    slli a0, a0, 4
1197; CHECK-NEXT:    add a0, sp, a0
1198; CHECK-NEXT:    addi a0, a0, 16
1199; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1200; CHECK-NEXT:    addi a0, sp, 16
1201; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1202; CHECK-NEXT:    vsetvli zero, a4, e64, m8, ta, ma
1203; CHECK-NEXT:    vfmadd.vv v8, v24, v16, v0.t
1204; CHECK-NEXT:    csrr a0, vlenb
1205; CHECK-NEXT:    li a1, 40
1206; CHECK-NEXT:    mul a0, a0, a1
1207; CHECK-NEXT:    add a0, sp, a0
1208; CHECK-NEXT:    addi a0, a0, 16
1209; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1210; CHECK-NEXT:    csrr a0, vlenb
1211; CHECK-NEXT:    li a1, 48
1212; CHECK-NEXT:    mul a0, a0, a1
1213; CHECK-NEXT:    add sp, sp, a0
1214; CHECK-NEXT:    .cfi_def_cfa sp, 16
1215; CHECK-NEXT:    addi sp, sp, 16
1216; CHECK-NEXT:    .cfi_def_cfa_offset 0
1217; CHECK-NEXT:    ret
1218  %v = call <vscale x 16 x double> @llvm.vp.fmuladd.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)
1219  ret <vscale x 16 x double> %v
1220}
1221
1222define <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) {
1223; CHECK-LABEL: vfma_vv_nxv16f64_unmasked:
1224; CHECK:       # %bb.0:
1225; CHECK-NEXT:    addi sp, sp, -16
1226; CHECK-NEXT:    .cfi_def_cfa_offset 16
1227; CHECK-NEXT:    csrr a1, vlenb
1228; CHECK-NEXT:    slli a1, a1, 5
1229; CHECK-NEXT:    sub sp, sp, a1
1230; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb
1231; CHECK-NEXT:    csrr a1, vlenb
1232; CHECK-NEXT:    slli a1, a1, 4
1233; CHECK-NEXT:    add a1, sp, a1
1234; CHECK-NEXT:    addi a1, a1, 16
1235; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
1236; CHECK-NEXT:    csrr a1, vlenb
1237; CHECK-NEXT:    li a3, 24
1238; CHECK-NEXT:    mul a1, a1, a3
1239; CHECK-NEXT:    add a1, sp, a1
1240; CHECK-NEXT:    addi a1, a1, 16
1241; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
1242; CHECK-NEXT:    csrr a1, vlenb
1243; CHECK-NEXT:    slli a3, a1, 3
1244; CHECK-NEXT:    add a5, a2, a3
1245; CHECK-NEXT:    vl8re64.v v8, (a5)
1246; CHECK-NEXT:    csrr a5, vlenb
1247; CHECK-NEXT:    slli a5, a5, 3
1248; CHECK-NEXT:    add a5, sp, a5
1249; CHECK-NEXT:    addi a5, a5, 16
1250; CHECK-NEXT:    vs8r.v v8, (a5) # Unknown-size Folded Spill
1251; CHECK-NEXT:    sub a5, a4, a1
1252; CHECK-NEXT:    add a3, a0, a3
1253; CHECK-NEXT:    vl8re64.v v24, (a3)
1254; CHECK-NEXT:    sltu a3, a4, a5
1255; CHECK-NEXT:    vl8re64.v v8, (a2)
1256; CHECK-NEXT:    addi a2, sp, 16
1257; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1258; CHECK-NEXT:    vl8re64.v v0, (a0)
1259; CHECK-NEXT:    addi a3, a3, -1
1260; CHECK-NEXT:    and a3, a3, a5
1261; CHECK-NEXT:    csrr a0, vlenb
1262; CHECK-NEXT:    slli a0, a0, 4
1263; CHECK-NEXT:    add a0, sp, a0
1264; CHECK-NEXT:    addi a0, a0, 16
1265; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1266; CHECK-NEXT:    csrr a0, vlenb
1267; CHECK-NEXT:    slli a0, a0, 3
1268; CHECK-NEXT:    add a0, sp, a0
1269; CHECK-NEXT:    addi a0, a0, 16
1270; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1271; CHECK-NEXT:    vsetvli zero, a3, e64, m8, ta, ma
1272; CHECK-NEXT:    vfmadd.vv v24, v16, v8
1273; CHECK-NEXT:    bltu a4, a1, .LBB93_2
1274; CHECK-NEXT:  # %bb.1:
1275; CHECK-NEXT:    mv a4, a1
1276; CHECK-NEXT:  .LBB93_2:
1277; CHECK-NEXT:    csrr a0, vlenb
1278; CHECK-NEXT:    li a1, 24
1279; CHECK-NEXT:    mul a0, a0, a1
1280; CHECK-NEXT:    add a0, sp, a0
1281; CHECK-NEXT:    addi a0, a0, 16
1282; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1283; CHECK-NEXT:    addi a0, sp, 16
1284; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1285; CHECK-NEXT:    vsetvli zero, a4, e64, m8, ta, ma
1286; CHECK-NEXT:    vfmadd.vv v0, v16, v8
1287; CHECK-NEXT:    vmv.v.v v8, v0
1288; CHECK-NEXT:    vmv8r.v v16, v24
1289; CHECK-NEXT:    csrr a0, vlenb
1290; CHECK-NEXT:    slli a0, a0, 5
1291; CHECK-NEXT:    add sp, sp, a0
1292; CHECK-NEXT:    .cfi_def_cfa sp, 16
1293; CHECK-NEXT:    addi sp, sp, 16
1294; CHECK-NEXT:    .cfi_def_cfa_offset 0
1295; CHECK-NEXT:    ret
1296  %v = call <vscale x 16 x double> @llvm.vp.fmuladd.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)
1297  ret <vscale x 16 x double> %v
1298}
1299
1300declare <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
1301
1302define <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) {
1303; CHECK-LABEL: vfmsub_vv_nxv1f16:
1304; CHECK:       # %bb.0:
1305; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1306; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
1307; CHECK-NEXT:    vmv1r.v v8, v9
1308; CHECK-NEXT:    ret
1309  %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)
1310  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1311  ret <vscale x 1 x half> %v
1312}
1313
1314define <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) {
1315; CHECK-LABEL: vfmsub_vv_nxv1f16_unmasked:
1316; CHECK:       # %bb.0:
1317; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1318; CHECK-NEXT:    vfmsub.vv v8, v9, v10
1319; CHECK-NEXT:    ret
1320  %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)
1321  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1322  ret <vscale x 1 x half> %v
1323}
1324
1325define <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) {
1326; CHECK-LABEL: vfmsub_vf_nxv1f16:
1327; CHECK:       # %bb.0:
1328; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1329; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1330; CHECK-NEXT:    ret
1331  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1332  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1333  %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)
1334  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1335  ret <vscale x 1 x half> %v
1336}
1337
1338define <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) {
1339; CHECK-LABEL: vfmsub_vf_nxv1f16_commute:
1340; CHECK:       # %bb.0:
1341; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1342; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1343; CHECK-NEXT:    ret
1344  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1345  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1346  %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)
1347  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1348  ret <vscale x 1 x half> %v
1349}
1350
1351define <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) {
1352; CHECK-LABEL: vfmsub_vf_nxv1f16_unmasked:
1353; CHECK:       # %bb.0:
1354; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1355; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
1356; CHECK-NEXT:    ret
1357  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1358  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1359  %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)
1360  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1361  ret <vscale x 1 x half> %v
1362}
1363
1364define <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) {
1365; CHECK-LABEL: vfmsub_vf_nxv1f16_unmasked_commute:
1366; CHECK:       # %bb.0:
1367; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1368; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
1369; CHECK-NEXT:    ret
1370  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1371  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1372  %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)
1373  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1374  ret <vscale x 1 x half> %v
1375}
1376
1377define <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) {
1378; CHECK-LABEL: vfnmadd_vv_nxv1f16:
1379; CHECK:       # %bb.0:
1380; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1381; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
1382; CHECK-NEXT:    vmv1r.v v8, v9
1383; CHECK-NEXT:    ret
1384  %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)
1385  %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)
1386  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1387  ret <vscale x 1 x half> %v
1388}
1389
1390define <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) {
1391; CHECK-LABEL: vfnmadd_vv_nxv1f16_commuted:
1392; CHECK:       # %bb.0:
1393; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1394; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1395; CHECK-NEXT:    ret
1396  %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)
1397  %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)
1398  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1399  ret <vscale x 1 x half> %v
1400}
1401
1402define <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) {
1403; CHECK-LABEL: vfnmadd_vv_nxv1f16_unmasked:
1404; CHECK:       # %bb.0:
1405; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1406; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1407; CHECK-NEXT:    ret
1408  %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)
1409  %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)
1410  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1411  ret <vscale x 1 x half> %v
1412}
1413
1414define <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) {
1415; CHECK-LABEL: vfnmadd_vv_nxv1f16_unmasked_commuted:
1416; CHECK:       # %bb.0:
1417; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1418; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1419; CHECK-NEXT:    ret
1420  %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)
1421  %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)
1422  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1423  ret <vscale x 1 x half> %v
1424}
1425
1426define <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) {
1427; CHECK-LABEL: vfnmadd_vf_nxv1f16:
1428; CHECK:       # %bb.0:
1429; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1430; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1431; CHECK-NEXT:    ret
1432  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1433  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1434  %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)
1435  %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)
1436  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1437  ret <vscale x 1 x half> %v
1438}
1439
1440define <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) {
1441; CHECK-LABEL: vfnmadd_vf_nxv1f16_commute:
1442; CHECK:       # %bb.0:
1443; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1444; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1445; CHECK-NEXT:    ret
1446  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1447  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1448  %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)
1449  %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)
1450  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1451  ret <vscale x 1 x half> %v
1452}
1453
1454define <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) {
1455; CHECK-LABEL: vfnmadd_vf_nxv1f16_unmasked:
1456; CHECK:       # %bb.0:
1457; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1458; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1459; CHECK-NEXT:    ret
1460  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1461  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1462  %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)
1463  %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)
1464  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1465  ret <vscale x 1 x half> %v
1466}
1467
1468define <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) {
1469; CHECK-LABEL: vfnmadd_vf_nxv1f16_unmasked_commute:
1470; CHECK:       # %bb.0:
1471; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1472; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1473; CHECK-NEXT:    ret
1474  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1475  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1476  %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)
1477  %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)
1478  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1479  ret <vscale x 1 x half> %v
1480}
1481
1482define <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) {
1483; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat:
1484; CHECK:       # %bb.0:
1485; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1486; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1487; CHECK-NEXT:    ret
1488  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1489  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1490  %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)
1491  %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)
1492  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1493  ret <vscale x 1 x half> %v
1494}
1495
1496define <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) {
1497; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_commute:
1498; CHECK:       # %bb.0:
1499; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1500; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1501; CHECK-NEXT:    ret
1502  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1503  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1504  %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)
1505  %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)
1506  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1507  ret <vscale x 1 x half> %v
1508}
1509
1510define <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) {
1511; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked:
1512; CHECK:       # %bb.0:
1513; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1514; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1515; CHECK-NEXT:    ret
1516  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1517  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1518  %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)
1519  %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)
1520  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1521  ret <vscale x 1 x half> %v
1522}
1523
1524define <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) {
1525; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked_commute:
1526; CHECK:       # %bb.0:
1527; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1528; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1529; CHECK-NEXT:    ret
1530  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1531  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1532  %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)
1533  %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)
1534  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1535  ret <vscale x 1 x half> %v
1536}
1537
1538define <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) {
1539; CHECK-LABEL: vfnmsub_vv_nxv1f16:
1540; CHECK:       # %bb.0:
1541; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1542; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
1543; CHECK-NEXT:    vmv1r.v v8, v9
1544; CHECK-NEXT:    ret
1545  %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)
1546  %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)
1547  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1548  ret <vscale x 1 x half> %v
1549}
1550
1551define <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) {
1552; CHECK-LABEL: vfnmsub_vv_nxv1f16_commuted:
1553; CHECK:       # %bb.0:
1554; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1555; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1556; CHECK-NEXT:    ret
1557  %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)
1558  %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)
1559  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1560  ret <vscale x 1 x half> %v
1561}
1562
1563define <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) {
1564; CHECK-LABEL: vfnmsub_vv_nxv1f16_unmasked:
1565; CHECK:       # %bb.0:
1566; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1567; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1568; CHECK-NEXT:    ret
1569  %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)
1570  %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)
1571  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1572  ret <vscale x 1 x half> %v
1573}
1574
1575define <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) {
1576; CHECK-LABEL: vfnmsub_vv_nxv1f16_unmasked_commuted:
1577; CHECK:       # %bb.0:
1578; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1579; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1580; CHECK-NEXT:    ret
1581  %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)
1582  %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)
1583  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1584  ret <vscale x 1 x half> %v
1585}
1586
1587define <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) {
1588; CHECK-LABEL: vfnmsub_vf_nxv1f16:
1589; CHECK:       # %bb.0:
1590; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1591; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1592; CHECK-NEXT:    ret
1593  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1594  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1595  %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)
1596  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1597  ret <vscale x 1 x half> %v
1598}
1599
1600define <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) {
1601; CHECK-LABEL: vfnmsub_vf_nxv1f16_commute:
1602; CHECK:       # %bb.0:
1603; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1604; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1605; CHECK-NEXT:    ret
1606  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1607  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1608  %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)
1609  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1610  ret <vscale x 1 x half> %v
1611}
1612
1613define <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) {
1614; CHECK-LABEL: vfnmsub_vf_nxv1f16_unmasked:
1615; CHECK:       # %bb.0:
1616; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1617; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
1618; CHECK-NEXT:    ret
1619  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1620  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1621  %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)
1622  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1623  ret <vscale x 1 x half> %v
1624}
1625
1626define <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) {
1627; CHECK-LABEL: vfnmsub_vf_nxv1f16_unmasked_commute:
1628; CHECK:       # %bb.0:
1629; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1630; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
1631; CHECK-NEXT:    ret
1632  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1633  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1634  %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)
1635  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1636  ret <vscale x 1 x half> %v
1637}
1638
1639define <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) {
1640; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat:
1641; CHECK:       # %bb.0:
1642; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1643; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1644; CHECK-NEXT:    ret
1645  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1646  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1647  %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)
1648  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1649  ret <vscale x 1 x half> %v
1650}
1651
1652define <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) {
1653; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_commute:
1654; CHECK:       # %bb.0:
1655; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1656; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1657; CHECK-NEXT:    ret
1658  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1659  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1660  %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)
1661  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1662  ret <vscale x 1 x half> %v
1663}
1664
1665define <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) {
1666; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked:
1667; CHECK:       # %bb.0:
1668; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1669; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
1670; CHECK-NEXT:    ret
1671  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1672  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1673  %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)
1674  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1675  ret <vscale x 1 x half> %v
1676}
1677
1678define <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) {
1679; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked_commute:
1680; CHECK:       # %bb.0:
1681; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1682; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
1683; CHECK-NEXT:    ret
1684  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1685  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1686  %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)
1687  %v = call <vscale x 1 x half> @llvm.vp.fmuladd.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)
1688  ret <vscale x 1 x half> %v
1689}
1690
1691declare <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
1692
1693define <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) {
1694; CHECK-LABEL: vfmsub_vv_nxv2f16:
1695; CHECK:       # %bb.0:
1696; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1697; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
1698; CHECK-NEXT:    vmv1r.v v8, v9
1699; CHECK-NEXT:    ret
1700  %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)
1701  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1702  ret <vscale x 2 x half> %v
1703}
1704
1705define <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) {
1706; CHECK-LABEL: vfmsub_vv_nxv2f16_unmasked:
1707; CHECK:       # %bb.0:
1708; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1709; CHECK-NEXT:    vfmsub.vv v8, v9, v10
1710; CHECK-NEXT:    ret
1711  %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)
1712  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1713  ret <vscale x 2 x half> %v
1714}
1715
1716define <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) {
1717; CHECK-LABEL: vfmsub_vf_nxv2f16:
1718; CHECK:       # %bb.0:
1719; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1720; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1721; CHECK-NEXT:    ret
1722  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1723  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1724  %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)
1725  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1726  ret <vscale x 2 x half> %v
1727}
1728
1729define <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) {
1730; CHECK-LABEL: vfmsub_vf_nxv2f16_commute:
1731; CHECK:       # %bb.0:
1732; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1733; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1734; CHECK-NEXT:    ret
1735  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1736  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1737  %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)
1738  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1739  ret <vscale x 2 x half> %v
1740}
1741
1742define <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) {
1743; CHECK-LABEL: vfmsub_vf_nxv2f16_unmasked:
1744; CHECK:       # %bb.0:
1745; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1746; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
1747; CHECK-NEXT:    ret
1748  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1749  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1750  %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)
1751  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1752  ret <vscale x 2 x half> %v
1753}
1754
1755define <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) {
1756; CHECK-LABEL: vfmsub_vf_nxv2f16_unmasked_commute:
1757; CHECK:       # %bb.0:
1758; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1759; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
1760; CHECK-NEXT:    ret
1761  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1762  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1763  %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)
1764  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1765  ret <vscale x 2 x half> %v
1766}
1767
1768define <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) {
1769; CHECK-LABEL: vfnmadd_vv_nxv2f16:
1770; CHECK:       # %bb.0:
1771; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1772; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
1773; CHECK-NEXT:    vmv1r.v v8, v9
1774; CHECK-NEXT:    ret
1775  %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)
1776  %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)
1777  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1778  ret <vscale x 2 x half> %v
1779}
1780
1781define <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) {
1782; CHECK-LABEL: vfnmadd_vv_nxv2f16_commuted:
1783; CHECK:       # %bb.0:
1784; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1785; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1786; CHECK-NEXT:    ret
1787  %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)
1788  %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)
1789  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1790  ret <vscale x 2 x half> %v
1791}
1792
1793define <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) {
1794; CHECK-LABEL: vfnmadd_vv_nxv2f16_unmasked:
1795; CHECK:       # %bb.0:
1796; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1797; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1798; CHECK-NEXT:    ret
1799  %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)
1800  %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)
1801  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1802  ret <vscale x 2 x half> %v
1803}
1804
1805define <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) {
1806; CHECK-LABEL: vfnmadd_vv_nxv2f16_unmasked_commuted:
1807; CHECK:       # %bb.0:
1808; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1809; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1810; CHECK-NEXT:    ret
1811  %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)
1812  %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)
1813  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1814  ret <vscale x 2 x half> %v
1815}
1816
1817define <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) {
1818; CHECK-LABEL: vfnmadd_vf_nxv2f16:
1819; CHECK:       # %bb.0:
1820; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1821; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1822; CHECK-NEXT:    ret
1823  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1824  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1825  %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)
1826  %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)
1827  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1828  ret <vscale x 2 x half> %v
1829}
1830
1831define <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) {
1832; CHECK-LABEL: vfnmadd_vf_nxv2f16_commute:
1833; CHECK:       # %bb.0:
1834; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1835; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1836; CHECK-NEXT:    ret
1837  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1838  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1839  %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)
1840  %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)
1841  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1842  ret <vscale x 2 x half> %v
1843}
1844
1845define <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) {
1846; CHECK-LABEL: vfnmadd_vf_nxv2f16_unmasked:
1847; CHECK:       # %bb.0:
1848; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1849; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1850; CHECK-NEXT:    ret
1851  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1852  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1853  %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)
1854  %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)
1855  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1856  ret <vscale x 2 x half> %v
1857}
1858
1859define <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) {
1860; CHECK-LABEL: vfnmadd_vf_nxv2f16_unmasked_commute:
1861; CHECK:       # %bb.0:
1862; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1863; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1864; CHECK-NEXT:    ret
1865  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1866  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1867  %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)
1868  %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)
1869  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1870  ret <vscale x 2 x half> %v
1871}
1872
1873define <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) {
1874; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat:
1875; CHECK:       # %bb.0:
1876; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1877; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1878; CHECK-NEXT:    ret
1879  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1880  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1881  %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)
1882  %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)
1883  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1884  ret <vscale x 2 x half> %v
1885}
1886
1887define <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) {
1888; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_commute:
1889; CHECK:       # %bb.0:
1890; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1891; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1892; CHECK-NEXT:    ret
1893  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1894  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1895  %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)
1896  %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)
1897  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1898  ret <vscale x 2 x half> %v
1899}
1900
1901define <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) {
1902; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked:
1903; CHECK:       # %bb.0:
1904; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1905; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1906; CHECK-NEXT:    ret
1907  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1908  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1909  %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)
1910  %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)
1911  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1912  ret <vscale x 2 x half> %v
1913}
1914
1915define <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) {
1916; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked_commute:
1917; CHECK:       # %bb.0:
1918; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1919; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1920; CHECK-NEXT:    ret
1921  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1922  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1923  %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)
1924  %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)
1925  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1926  ret <vscale x 2 x half> %v
1927}
1928
1929define <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) {
1930; CHECK-LABEL: vfnmsub_vv_nxv2f16:
1931; CHECK:       # %bb.0:
1932; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1933; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
1934; CHECK-NEXT:    vmv1r.v v8, v9
1935; CHECK-NEXT:    ret
1936  %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)
1937  %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)
1938  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1939  ret <vscale x 2 x half> %v
1940}
1941
1942define <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) {
1943; CHECK-LABEL: vfnmsub_vv_nxv2f16_commuted:
1944; CHECK:       # %bb.0:
1945; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1946; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1947; CHECK-NEXT:    ret
1948  %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)
1949  %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)
1950  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1951  ret <vscale x 2 x half> %v
1952}
1953
1954define <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) {
1955; CHECK-LABEL: vfnmsub_vv_nxv2f16_unmasked:
1956; CHECK:       # %bb.0:
1957; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1958; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1959; CHECK-NEXT:    ret
1960  %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)
1961  %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)
1962  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1963  ret <vscale x 2 x half> %v
1964}
1965
1966define <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) {
1967; CHECK-LABEL: vfnmsub_vv_nxv2f16_unmasked_commuted:
1968; CHECK:       # %bb.0:
1969; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1970; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1971; CHECK-NEXT:    ret
1972  %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)
1973  %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)
1974  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1975  ret <vscale x 2 x half> %v
1976}
1977
1978define <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) {
1979; CHECK-LABEL: vfnmsub_vf_nxv2f16:
1980; CHECK:       # %bb.0:
1981; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1982; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1983; CHECK-NEXT:    ret
1984  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1985  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1986  %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)
1987  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
1988  ret <vscale x 2 x half> %v
1989}
1990
1991define <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) {
1992; CHECK-LABEL: vfnmsub_vf_nxv2f16_commute:
1993; CHECK:       # %bb.0:
1994; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1995; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1996; CHECK-NEXT:    ret
1997  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1998  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1999  %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)
2000  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
2001  ret <vscale x 2 x half> %v
2002}
2003
2004define <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) {
2005; CHECK-LABEL: vfnmsub_vf_nxv2f16_unmasked:
2006; CHECK:       # %bb.0:
2007; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2008; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2009; CHECK-NEXT:    ret
2010  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2011  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2012  %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)
2013  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
2014  ret <vscale x 2 x half> %v
2015}
2016
2017define <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) {
2018; CHECK-LABEL: vfnmsub_vf_nxv2f16_unmasked_commute:
2019; CHECK:       # %bb.0:
2020; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2021; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2022; CHECK-NEXT:    ret
2023  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2024  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2025  %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)
2026  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
2027  ret <vscale x 2 x half> %v
2028}
2029
2030define <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) {
2031; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat:
2032; CHECK:       # %bb.0:
2033; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2034; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2035; CHECK-NEXT:    ret
2036  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2037  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2038  %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)
2039  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
2040  ret <vscale x 2 x half> %v
2041}
2042
2043define <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) {
2044; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_commute:
2045; CHECK:       # %bb.0:
2046; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2047; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2048; CHECK-NEXT:    ret
2049  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2050  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2051  %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)
2052  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
2053  ret <vscale x 2 x half> %v
2054}
2055
2056define <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) {
2057; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked:
2058; CHECK:       # %bb.0:
2059; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2060; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2061; CHECK-NEXT:    ret
2062  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2063  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2064  %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)
2065  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
2066  ret <vscale x 2 x half> %v
2067}
2068
2069define <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) {
2070; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked_commute:
2071; CHECK:       # %bb.0:
2072; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2073; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2074; CHECK-NEXT:    ret
2075  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2076  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2077  %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)
2078  %v = call <vscale x 2 x half> @llvm.vp.fmuladd.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)
2079  ret <vscale x 2 x half> %v
2080}
2081
2082declare <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
2083
2084define <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) {
2085; CHECK-LABEL: vfmsub_vv_nxv4f16:
2086; CHECK:       # %bb.0:
2087; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2088; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
2089; CHECK-NEXT:    vmv.v.v v8, v9
2090; CHECK-NEXT:    ret
2091  %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)
2092  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2093  ret <vscale x 4 x half> %v
2094}
2095
2096define <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) {
2097; CHECK-LABEL: vfmsub_vv_nxv4f16_unmasked:
2098; CHECK:       # %bb.0:
2099; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2100; CHECK-NEXT:    vfmsub.vv v8, v9, v10
2101; CHECK-NEXT:    ret
2102  %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)
2103  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2104  ret <vscale x 4 x half> %v
2105}
2106
2107define <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) {
2108; CHECK-LABEL: vfmsub_vf_nxv4f16:
2109; CHECK:       # %bb.0:
2110; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2111; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
2112; CHECK-NEXT:    ret
2113  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2114  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2115  %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)
2116  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2117  ret <vscale x 4 x half> %v
2118}
2119
2120define <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) {
2121; CHECK-LABEL: vfmsub_vf_nxv4f16_commute:
2122; CHECK:       # %bb.0:
2123; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2124; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
2125; CHECK-NEXT:    ret
2126  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2127  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2128  %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)
2129  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2130  ret <vscale x 4 x half> %v
2131}
2132
2133define <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) {
2134; CHECK-LABEL: vfmsub_vf_nxv4f16_unmasked:
2135; CHECK:       # %bb.0:
2136; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2137; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
2138; CHECK-NEXT:    ret
2139  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2140  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2141  %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)
2142  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2143  ret <vscale x 4 x half> %v
2144}
2145
2146define <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) {
2147; CHECK-LABEL: vfmsub_vf_nxv4f16_unmasked_commute:
2148; CHECK:       # %bb.0:
2149; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2150; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
2151; CHECK-NEXT:    ret
2152  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2153  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2154  %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)
2155  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2156  ret <vscale x 4 x half> %v
2157}
2158
2159define <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) {
2160; CHECK-LABEL: vfnmadd_vv_nxv4f16:
2161; CHECK:       # %bb.0:
2162; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2163; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
2164; CHECK-NEXT:    vmv.v.v v8, v9
2165; CHECK-NEXT:    ret
2166  %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)
2167  %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)
2168  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2169  ret <vscale x 4 x half> %v
2170}
2171
2172define <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) {
2173; CHECK-LABEL: vfnmadd_vv_nxv4f16_commuted:
2174; CHECK:       # %bb.0:
2175; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2176; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
2177; CHECK-NEXT:    ret
2178  %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)
2179  %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)
2180  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2181  ret <vscale x 4 x half> %v
2182}
2183
2184define <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) {
2185; CHECK-LABEL: vfnmadd_vv_nxv4f16_unmasked:
2186; CHECK:       # %bb.0:
2187; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2188; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2189; CHECK-NEXT:    ret
2190  %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)
2191  %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)
2192  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2193  ret <vscale x 4 x half> %v
2194}
2195
2196define <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) {
2197; CHECK-LABEL: vfnmadd_vv_nxv4f16_unmasked_commuted:
2198; CHECK:       # %bb.0:
2199; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2200; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2201; CHECK-NEXT:    ret
2202  %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)
2203  %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)
2204  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2205  ret <vscale x 4 x half> %v
2206}
2207
2208define <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) {
2209; CHECK-LABEL: vfnmadd_vf_nxv4f16:
2210; CHECK:       # %bb.0:
2211; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2212; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2213; CHECK-NEXT:    ret
2214  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2215  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2216  %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)
2217  %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)
2218  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2219  ret <vscale x 4 x half> %v
2220}
2221
2222define <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) {
2223; CHECK-LABEL: vfnmadd_vf_nxv4f16_commute:
2224; CHECK:       # %bb.0:
2225; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2226; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2227; CHECK-NEXT:    ret
2228  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2229  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2230  %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)
2231  %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)
2232  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2233  ret <vscale x 4 x half> %v
2234}
2235
2236define <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) {
2237; CHECK-LABEL: vfnmadd_vf_nxv4f16_unmasked:
2238; CHECK:       # %bb.0:
2239; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2240; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2241; CHECK-NEXT:    ret
2242  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2243  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2244  %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)
2245  %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)
2246  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2247  ret <vscale x 4 x half> %v
2248}
2249
2250define <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) {
2251; CHECK-LABEL: vfnmadd_vf_nxv4f16_unmasked_commute:
2252; CHECK:       # %bb.0:
2253; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2254; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2255; CHECK-NEXT:    ret
2256  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2257  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2258  %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)
2259  %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)
2260  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2261  ret <vscale x 4 x half> %v
2262}
2263
2264define <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) {
2265; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat:
2266; CHECK:       # %bb.0:
2267; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2268; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2269; CHECK-NEXT:    ret
2270  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2271  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2272  %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)
2273  %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)
2274  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2275  ret <vscale x 4 x half> %v
2276}
2277
2278define <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) {
2279; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_commute:
2280; CHECK:       # %bb.0:
2281; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2282; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2283; CHECK-NEXT:    ret
2284  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2285  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2286  %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)
2287  %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)
2288  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2289  ret <vscale x 4 x half> %v
2290}
2291
2292define <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) {
2293; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked:
2294; CHECK:       # %bb.0:
2295; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2296; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2297; CHECK-NEXT:    ret
2298  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2299  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2300  %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)
2301  %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)
2302  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2303  ret <vscale x 4 x half> %v
2304}
2305
2306define <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) {
2307; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked_commute:
2308; CHECK:       # %bb.0:
2309; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2310; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2311; CHECK-NEXT:    ret
2312  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2313  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2314  %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)
2315  %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)
2316  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2317  ret <vscale x 4 x half> %v
2318}
2319
2320define <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) {
2321; CHECK-LABEL: vfnmsub_vv_nxv4f16:
2322; CHECK:       # %bb.0:
2323; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2324; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
2325; CHECK-NEXT:    vmv.v.v v8, v9
2326; CHECK-NEXT:    ret
2327  %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)
2328  %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)
2329  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2330  ret <vscale x 4 x half> %v
2331}
2332
2333define <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) {
2334; CHECK-LABEL: vfnmsub_vv_nxv4f16_commuted:
2335; CHECK:       # %bb.0:
2336; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2337; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
2338; CHECK-NEXT:    ret
2339  %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)
2340  %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)
2341  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2342  ret <vscale x 4 x half> %v
2343}
2344
2345define <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) {
2346; CHECK-LABEL: vfnmsub_vv_nxv4f16_unmasked:
2347; CHECK:       # %bb.0:
2348; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2349; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2350; CHECK-NEXT:    ret
2351  %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)
2352  %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)
2353  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2354  ret <vscale x 4 x half> %v
2355}
2356
2357define <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) {
2358; CHECK-LABEL: vfnmsub_vv_nxv4f16_unmasked_commuted:
2359; CHECK:       # %bb.0:
2360; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2361; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2362; CHECK-NEXT:    ret
2363  %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)
2364  %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)
2365  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2366  ret <vscale x 4 x half> %v
2367}
2368
2369define <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) {
2370; CHECK-LABEL: vfnmsub_vf_nxv4f16:
2371; CHECK:       # %bb.0:
2372; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2373; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2374; CHECK-NEXT:    ret
2375  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2376  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2377  %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)
2378  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2379  ret <vscale x 4 x half> %v
2380}
2381
2382define <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) {
2383; CHECK-LABEL: vfnmsub_vf_nxv4f16_commute:
2384; CHECK:       # %bb.0:
2385; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2386; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2387; CHECK-NEXT:    ret
2388  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2389  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2390  %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)
2391  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2392  ret <vscale x 4 x half> %v
2393}
2394
2395define <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) {
2396; CHECK-LABEL: vfnmsub_vf_nxv4f16_unmasked:
2397; CHECK:       # %bb.0:
2398; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2399; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2400; CHECK-NEXT:    ret
2401  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2402  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2403  %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)
2404  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2405  ret <vscale x 4 x half> %v
2406}
2407
2408define <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) {
2409; CHECK-LABEL: vfnmsub_vf_nxv4f16_unmasked_commute:
2410; CHECK:       # %bb.0:
2411; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2412; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2413; CHECK-NEXT:    ret
2414  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2415  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2416  %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)
2417  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2418  ret <vscale x 4 x half> %v
2419}
2420
2421define <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) {
2422; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat:
2423; CHECK:       # %bb.0:
2424; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2425; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2426; CHECK-NEXT:    ret
2427  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2428  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2429  %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)
2430  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2431  ret <vscale x 4 x half> %v
2432}
2433
2434define <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) {
2435; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_commute:
2436; CHECK:       # %bb.0:
2437; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2438; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2439; CHECK-NEXT:    ret
2440  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2441  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2442  %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)
2443  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2444  ret <vscale x 4 x half> %v
2445}
2446
2447define <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) {
2448; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked:
2449; CHECK:       # %bb.0:
2450; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2451; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2452; CHECK-NEXT:    ret
2453  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2454  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2455  %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)
2456  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2457  ret <vscale x 4 x half> %v
2458}
2459
2460define <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) {
2461; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked_commute:
2462; CHECK:       # %bb.0:
2463; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2464; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2465; CHECK-NEXT:    ret
2466  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2467  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2468  %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)
2469  %v = call <vscale x 4 x half> @llvm.vp.fmuladd.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)
2470  ret <vscale x 4 x half> %v
2471}
2472
2473declare <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
2474
2475define <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) {
2476; CHECK-LABEL: vfmsub_vv_nxv8f16:
2477; CHECK:       # %bb.0:
2478; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2479; CHECK-NEXT:    vfmsub.vv v10, v8, v12, v0.t
2480; CHECK-NEXT:    vmv.v.v v8, v10
2481; CHECK-NEXT:    ret
2482  %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)
2483  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2484  ret <vscale x 8 x half> %v
2485}
2486
2487define <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) {
2488; CHECK-LABEL: vfmsub_vv_nxv8f16_unmasked:
2489; CHECK:       # %bb.0:
2490; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2491; CHECK-NEXT:    vfmsub.vv v8, v10, v12
2492; CHECK-NEXT:    ret
2493  %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)
2494  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2495  ret <vscale x 8 x half> %v
2496}
2497
2498define <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) {
2499; CHECK-LABEL: vfmsub_vf_nxv8f16:
2500; CHECK:       # %bb.0:
2501; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2502; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
2503; CHECK-NEXT:    ret
2504  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2505  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2506  %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)
2507  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2508  ret <vscale x 8 x half> %v
2509}
2510
2511define <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) {
2512; CHECK-LABEL: vfmsub_vf_nxv8f16_commute:
2513; CHECK:       # %bb.0:
2514; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2515; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
2516; CHECK-NEXT:    ret
2517  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2518  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2519  %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)
2520  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2521  ret <vscale x 8 x half> %v
2522}
2523
2524define <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) {
2525; CHECK-LABEL: vfmsub_vf_nxv8f16_unmasked:
2526; CHECK:       # %bb.0:
2527; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2528; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
2529; CHECK-NEXT:    ret
2530  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2531  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2532  %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)
2533  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2534  ret <vscale x 8 x half> %v
2535}
2536
2537define <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) {
2538; CHECK-LABEL: vfmsub_vf_nxv8f16_unmasked_commute:
2539; CHECK:       # %bb.0:
2540; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2541; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
2542; CHECK-NEXT:    ret
2543  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2544  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2545  %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)
2546  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2547  ret <vscale x 8 x half> %v
2548}
2549
2550define <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) {
2551; CHECK-LABEL: vfnmadd_vv_nxv8f16:
2552; CHECK:       # %bb.0:
2553; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2554; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
2555; CHECK-NEXT:    vmv.v.v v8, v10
2556; CHECK-NEXT:    ret
2557  %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)
2558  %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)
2559  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2560  ret <vscale x 8 x half> %v
2561}
2562
2563define <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) {
2564; CHECK-LABEL: vfnmadd_vv_nxv8f16_commuted:
2565; CHECK:       # %bb.0:
2566; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2567; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
2568; CHECK-NEXT:    ret
2569  %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)
2570  %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)
2571  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2572  ret <vscale x 8 x half> %v
2573}
2574
2575define <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) {
2576; CHECK-LABEL: vfnmadd_vv_nxv8f16_unmasked:
2577; CHECK:       # %bb.0:
2578; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2579; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2580; CHECK-NEXT:    ret
2581  %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)
2582  %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)
2583  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2584  ret <vscale x 8 x half> %v
2585}
2586
2587define <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) {
2588; CHECK-LABEL: vfnmadd_vv_nxv8f16_unmasked_commuted:
2589; CHECK:       # %bb.0:
2590; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2591; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2592; CHECK-NEXT:    ret
2593  %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)
2594  %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)
2595  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2596  ret <vscale x 8 x half> %v
2597}
2598
2599define <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) {
2600; CHECK-LABEL: vfnmadd_vf_nxv8f16:
2601; CHECK:       # %bb.0:
2602; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2603; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2604; CHECK-NEXT:    ret
2605  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2606  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2607  %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)
2608  %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)
2609  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2610  ret <vscale x 8 x half> %v
2611}
2612
2613define <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) {
2614; CHECK-LABEL: vfnmadd_vf_nxv8f16_commute:
2615; CHECK:       # %bb.0:
2616; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2617; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2618; CHECK-NEXT:    ret
2619  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2620  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2621  %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)
2622  %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)
2623  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2624  ret <vscale x 8 x half> %v
2625}
2626
2627define <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) {
2628; CHECK-LABEL: vfnmadd_vf_nxv8f16_unmasked:
2629; CHECK:       # %bb.0:
2630; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2631; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2632; CHECK-NEXT:    ret
2633  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2634  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2635  %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)
2636  %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)
2637  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2638  ret <vscale x 8 x half> %v
2639}
2640
2641define <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) {
2642; CHECK-LABEL: vfnmadd_vf_nxv8f16_unmasked_commute:
2643; CHECK:       # %bb.0:
2644; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2645; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2646; CHECK-NEXT:    ret
2647  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2648  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2649  %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)
2650  %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)
2651  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2652  ret <vscale x 8 x half> %v
2653}
2654
2655define <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) {
2656; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat:
2657; CHECK:       # %bb.0:
2658; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2659; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2660; CHECK-NEXT:    ret
2661  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2662  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2663  %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)
2664  %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)
2665  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2666  ret <vscale x 8 x half> %v
2667}
2668
2669define <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) {
2670; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_commute:
2671; CHECK:       # %bb.0:
2672; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2673; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2674; CHECK-NEXT:    ret
2675  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2676  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2677  %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)
2678  %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)
2679  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2680  ret <vscale x 8 x half> %v
2681}
2682
2683define <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) {
2684; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked:
2685; CHECK:       # %bb.0:
2686; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2687; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2688; CHECK-NEXT:    ret
2689  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2690  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2691  %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)
2692  %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)
2693  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2694  ret <vscale x 8 x half> %v
2695}
2696
2697define <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) {
2698; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked_commute:
2699; CHECK:       # %bb.0:
2700; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2701; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2702; CHECK-NEXT:    ret
2703  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2704  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2705  %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)
2706  %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)
2707  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2708  ret <vscale x 8 x half> %v
2709}
2710
2711define <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) {
2712; CHECK-LABEL: vfnmsub_vv_nxv8f16:
2713; CHECK:       # %bb.0:
2714; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2715; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
2716; CHECK-NEXT:    vmv.v.v v8, v10
2717; CHECK-NEXT:    ret
2718  %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)
2719  %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)
2720  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2721  ret <vscale x 8 x half> %v
2722}
2723
2724define <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) {
2725; CHECK-LABEL: vfnmsub_vv_nxv8f16_commuted:
2726; CHECK:       # %bb.0:
2727; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2728; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
2729; CHECK-NEXT:    ret
2730  %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)
2731  %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)
2732  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2733  ret <vscale x 8 x half> %v
2734}
2735
2736define <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) {
2737; CHECK-LABEL: vfnmsub_vv_nxv8f16_unmasked:
2738; CHECK:       # %bb.0:
2739; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2740; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2741; CHECK-NEXT:    ret
2742  %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)
2743  %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)
2744  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2745  ret <vscale x 8 x half> %v
2746}
2747
2748define <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) {
2749; CHECK-LABEL: vfnmsub_vv_nxv8f16_unmasked_commuted:
2750; CHECK:       # %bb.0:
2751; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2752; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2753; CHECK-NEXT:    ret
2754  %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)
2755  %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)
2756  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2757  ret <vscale x 8 x half> %v
2758}
2759
2760define <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) {
2761; CHECK-LABEL: vfnmsub_vf_nxv8f16:
2762; CHECK:       # %bb.0:
2763; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2764; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
2765; CHECK-NEXT:    ret
2766  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2767  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2768  %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)
2769  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2770  ret <vscale x 8 x half> %v
2771}
2772
2773define <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) {
2774; CHECK-LABEL: vfnmsub_vf_nxv8f16_commute:
2775; CHECK:       # %bb.0:
2776; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2777; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
2778; CHECK-NEXT:    ret
2779  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2780  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2781  %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)
2782  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2783  ret <vscale x 8 x half> %v
2784}
2785
2786define <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) {
2787; CHECK-LABEL: vfnmsub_vf_nxv8f16_unmasked:
2788; CHECK:       # %bb.0:
2789; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2790; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
2791; CHECK-NEXT:    ret
2792  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2793  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2794  %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)
2795  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2796  ret <vscale x 8 x half> %v
2797}
2798
2799define <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) {
2800; CHECK-LABEL: vfnmsub_vf_nxv8f16_unmasked_commute:
2801; CHECK:       # %bb.0:
2802; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2803; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
2804; CHECK-NEXT:    ret
2805  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2806  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2807  %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)
2808  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2809  ret <vscale x 8 x half> %v
2810}
2811
2812define <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) {
2813; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat:
2814; CHECK:       # %bb.0:
2815; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2816; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
2817; CHECK-NEXT:    ret
2818  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2819  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2820  %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)
2821  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2822  ret <vscale x 8 x half> %v
2823}
2824
2825define <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) {
2826; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_commute:
2827; CHECK:       # %bb.0:
2828; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2829; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
2830; CHECK-NEXT:    ret
2831  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2832  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2833  %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)
2834  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2835  ret <vscale x 8 x half> %v
2836}
2837
2838define <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) {
2839; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked:
2840; CHECK:       # %bb.0:
2841; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2842; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
2843; CHECK-NEXT:    ret
2844  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2845  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2846  %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)
2847  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2848  ret <vscale x 8 x half> %v
2849}
2850
2851define <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) {
2852; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked_commute:
2853; CHECK:       # %bb.0:
2854; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2855; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
2856; CHECK-NEXT:    ret
2857  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2858  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2859  %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)
2860  %v = call <vscale x 8 x half> @llvm.vp.fmuladd.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)
2861  ret <vscale x 8 x half> %v
2862}
2863
2864declare <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
2865
2866define <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) {
2867; CHECK-LABEL: vfmsub_vv_nxv16f16:
2868; CHECK:       # %bb.0:
2869; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2870; CHECK-NEXT:    vfmsub.vv v12, v8, v16, v0.t
2871; CHECK-NEXT:    vmv.v.v v8, v12
2872; CHECK-NEXT:    ret
2873  %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)
2874  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2875  ret <vscale x 16 x half> %v
2876}
2877
2878define <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) {
2879; CHECK-LABEL: vfmsub_vv_nxv16f16_unmasked:
2880; CHECK:       # %bb.0:
2881; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2882; CHECK-NEXT:    vfmsub.vv v8, v12, v16
2883; CHECK-NEXT:    ret
2884  %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)
2885  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2886  ret <vscale x 16 x half> %v
2887}
2888
2889define <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) {
2890; CHECK-LABEL: vfmsub_vf_nxv16f16:
2891; CHECK:       # %bb.0:
2892; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2893; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
2894; CHECK-NEXT:    ret
2895  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2896  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2897  %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)
2898  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2899  ret <vscale x 16 x half> %v
2900}
2901
2902define <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) {
2903; CHECK-LABEL: vfmsub_vf_nxv16f16_commute:
2904; CHECK:       # %bb.0:
2905; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2906; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
2907; CHECK-NEXT:    ret
2908  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2909  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2910  %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)
2911  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2912  ret <vscale x 16 x half> %v
2913}
2914
2915define <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) {
2916; CHECK-LABEL: vfmsub_vf_nxv16f16_unmasked:
2917; CHECK:       # %bb.0:
2918; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2919; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
2920; CHECK-NEXT:    ret
2921  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2922  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2923  %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)
2924  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2925  ret <vscale x 16 x half> %v
2926}
2927
2928define <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) {
2929; CHECK-LABEL: vfmsub_vf_nxv16f16_unmasked_commute:
2930; CHECK:       # %bb.0:
2931; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2932; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
2933; CHECK-NEXT:    ret
2934  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2935  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2936  %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)
2937  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2938  ret <vscale x 16 x half> %v
2939}
2940
2941define <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) {
2942; CHECK-LABEL: vfnmadd_vv_nxv16f16:
2943; CHECK:       # %bb.0:
2944; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2945; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
2946; CHECK-NEXT:    vmv.v.v v8, v12
2947; CHECK-NEXT:    ret
2948  %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)
2949  %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)
2950  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2951  ret <vscale x 16 x half> %v
2952}
2953
2954define <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) {
2955; CHECK-LABEL: vfnmadd_vv_nxv16f16_commuted:
2956; CHECK:       # %bb.0:
2957; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2958; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
2959; CHECK-NEXT:    ret
2960  %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)
2961  %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)
2962  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2963  ret <vscale x 16 x half> %v
2964}
2965
2966define <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) {
2967; CHECK-LABEL: vfnmadd_vv_nxv16f16_unmasked:
2968; CHECK:       # %bb.0:
2969; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2970; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
2971; CHECK-NEXT:    ret
2972  %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)
2973  %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)
2974  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2975  ret <vscale x 16 x half> %v
2976}
2977
2978define <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) {
2979; CHECK-LABEL: vfnmadd_vv_nxv16f16_unmasked_commuted:
2980; CHECK:       # %bb.0:
2981; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2982; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
2983; CHECK-NEXT:    ret
2984  %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)
2985  %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)
2986  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
2987  ret <vscale x 16 x half> %v
2988}
2989
2990define <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) {
2991; CHECK-LABEL: vfnmadd_vf_nxv16f16:
2992; CHECK:       # %bb.0:
2993; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2994; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
2995; CHECK-NEXT:    ret
2996  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2997  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2998  %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)
2999  %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)
3000  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3001  ret <vscale x 16 x half> %v
3002}
3003
3004define <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) {
3005; CHECK-LABEL: vfnmadd_vf_nxv16f16_commute:
3006; CHECK:       # %bb.0:
3007; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3008; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3009; CHECK-NEXT:    ret
3010  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3011  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3012  %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)
3013  %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)
3014  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3015  ret <vscale x 16 x half> %v
3016}
3017
3018define <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) {
3019; CHECK-LABEL: vfnmadd_vf_nxv16f16_unmasked:
3020; CHECK:       # %bb.0:
3021; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3022; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3023; CHECK-NEXT:    ret
3024  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3025  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3026  %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)
3027  %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)
3028  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3029  ret <vscale x 16 x half> %v
3030}
3031
3032define <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) {
3033; CHECK-LABEL: vfnmadd_vf_nxv16f16_unmasked_commute:
3034; CHECK:       # %bb.0:
3035; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3036; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3037; CHECK-NEXT:    ret
3038  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3039  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3040  %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)
3041  %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)
3042  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3043  ret <vscale x 16 x half> %v
3044}
3045
3046define <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) {
3047; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat:
3048; CHECK:       # %bb.0:
3049; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3050; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3051; CHECK-NEXT:    ret
3052  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3053  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3054  %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)
3055  %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)
3056  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3057  ret <vscale x 16 x half> %v
3058}
3059
3060define <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) {
3061; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_commute:
3062; CHECK:       # %bb.0:
3063; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3064; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3065; CHECK-NEXT:    ret
3066  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3067  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3068  %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)
3069  %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)
3070  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3071  ret <vscale x 16 x half> %v
3072}
3073
3074define <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) {
3075; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked:
3076; CHECK:       # %bb.0:
3077; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3078; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3079; CHECK-NEXT:    ret
3080  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3081  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3082  %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)
3083  %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)
3084  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3085  ret <vscale x 16 x half> %v
3086}
3087
3088define <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) {
3089; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked_commute:
3090; CHECK:       # %bb.0:
3091; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3092; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3093; CHECK-NEXT:    ret
3094  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3095  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3096  %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)
3097  %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)
3098  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3099  ret <vscale x 16 x half> %v
3100}
3101
3102define <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) {
3103; CHECK-LABEL: vfnmsub_vv_nxv16f16:
3104; CHECK:       # %bb.0:
3105; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3106; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
3107; CHECK-NEXT:    vmv.v.v v8, v12
3108; CHECK-NEXT:    ret
3109  %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)
3110  %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)
3111  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3112  ret <vscale x 16 x half> %v
3113}
3114
3115define <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) {
3116; CHECK-LABEL: vfnmsub_vv_nxv16f16_commuted:
3117; CHECK:       # %bb.0:
3118; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3119; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
3120; CHECK-NEXT:    ret
3121  %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)
3122  %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)
3123  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3124  ret <vscale x 16 x half> %v
3125}
3126
3127define <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) {
3128; CHECK-LABEL: vfnmsub_vv_nxv16f16_unmasked:
3129; CHECK:       # %bb.0:
3130; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3131; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
3132; CHECK-NEXT:    ret
3133  %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)
3134  %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)
3135  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3136  ret <vscale x 16 x half> %v
3137}
3138
3139define <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) {
3140; CHECK-LABEL: vfnmsub_vv_nxv16f16_unmasked_commuted:
3141; CHECK:       # %bb.0:
3142; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3143; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
3144; CHECK-NEXT:    ret
3145  %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)
3146  %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)
3147  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3148  ret <vscale x 16 x half> %v
3149}
3150
3151define <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) {
3152; CHECK-LABEL: vfnmsub_vf_nxv16f16:
3153; CHECK:       # %bb.0:
3154; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3155; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3156; CHECK-NEXT:    ret
3157  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3158  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3159  %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)
3160  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3161  ret <vscale x 16 x half> %v
3162}
3163
3164define <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) {
3165; CHECK-LABEL: vfnmsub_vf_nxv16f16_commute:
3166; CHECK:       # %bb.0:
3167; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3168; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3169; CHECK-NEXT:    ret
3170  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3171  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3172  %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)
3173  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3174  ret <vscale x 16 x half> %v
3175}
3176
3177define <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) {
3178; CHECK-LABEL: vfnmsub_vf_nxv16f16_unmasked:
3179; CHECK:       # %bb.0:
3180; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3181; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
3182; CHECK-NEXT:    ret
3183  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3184  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3185  %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)
3186  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3187  ret <vscale x 16 x half> %v
3188}
3189
3190define <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) {
3191; CHECK-LABEL: vfnmsub_vf_nxv16f16_unmasked_commute:
3192; CHECK:       # %bb.0:
3193; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3194; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
3195; CHECK-NEXT:    ret
3196  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3197  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3198  %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)
3199  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3200  ret <vscale x 16 x half> %v
3201}
3202
3203define <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) {
3204; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat:
3205; CHECK:       # %bb.0:
3206; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3207; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3208; CHECK-NEXT:    ret
3209  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3210  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3211  %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)
3212  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3213  ret <vscale x 16 x half> %v
3214}
3215
3216define <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) {
3217; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_commute:
3218; CHECK:       # %bb.0:
3219; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3220; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3221; CHECK-NEXT:    ret
3222  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3223  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3224  %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)
3225  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3226  ret <vscale x 16 x half> %v
3227}
3228
3229define <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) {
3230; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked:
3231; CHECK:       # %bb.0:
3232; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3233; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
3234; CHECK-NEXT:    ret
3235  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3236  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3237  %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)
3238  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3239  ret <vscale x 16 x half> %v
3240}
3241
3242define <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) {
3243; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked_commute:
3244; CHECK:       # %bb.0:
3245; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3246; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
3247; CHECK-NEXT:    ret
3248  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3249  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3250  %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)
3251  %v = call <vscale x 16 x half> @llvm.vp.fmuladd.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)
3252  ret <vscale x 16 x half> %v
3253}
3254
3255declare <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
3256
3257define <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) {
3258; CHECK-LABEL: vfmsub_vv_nxv32f16:
3259; CHECK:       # %bb.0:
3260; CHECK-NEXT:    vl8re16.v v24, (a0)
3261; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3262; CHECK-NEXT:    vfmsub.vv v16, v8, v24, v0.t
3263; CHECK-NEXT:    vmv.v.v v8, v16
3264; CHECK-NEXT:    ret
3265  %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)
3266  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3267  ret <vscale x 32 x half> %v
3268}
3269
3270define <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) {
3271; CHECK-LABEL: vfmsub_vv_nxv32f16_unmasked:
3272; CHECK:       # %bb.0:
3273; CHECK-NEXT:    vl8re16.v v24, (a0)
3274; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3275; CHECK-NEXT:    vfmsub.vv v8, v16, v24
3276; CHECK-NEXT:    ret
3277  %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)
3278  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3279  ret <vscale x 32 x half> %v
3280}
3281
3282define <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) {
3283; CHECK-LABEL: vfmsub_vf_nxv32f16:
3284; CHECK:       # %bb.0:
3285; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3286; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
3287; CHECK-NEXT:    ret
3288  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3289  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3290  %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)
3291  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3292  ret <vscale x 32 x half> %v
3293}
3294
3295define <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) {
3296; CHECK-LABEL: vfmsub_vf_nxv32f16_commute:
3297; CHECK:       # %bb.0:
3298; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3299; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
3300; CHECK-NEXT:    ret
3301  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3302  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3303  %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)
3304  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3305  ret <vscale x 32 x half> %v
3306}
3307
3308define <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) {
3309; CHECK-LABEL: vfmsub_vf_nxv32f16_unmasked:
3310; CHECK:       # %bb.0:
3311; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3312; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
3313; CHECK-NEXT:    ret
3314  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3315  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3316  %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)
3317  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3318  ret <vscale x 32 x half> %v
3319}
3320
3321define <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) {
3322; CHECK-LABEL: vfmsub_vf_nxv32f16_unmasked_commute:
3323; CHECK:       # %bb.0:
3324; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3325; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
3326; CHECK-NEXT:    ret
3327  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3328  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3329  %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)
3330  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3331  ret <vscale x 32 x half> %v
3332}
3333
3334define <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) {
3335; CHECK-LABEL: vfnmadd_vv_nxv32f16:
3336; CHECK:       # %bb.0:
3337; CHECK-NEXT:    vl8re16.v v24, (a0)
3338; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3339; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
3340; CHECK-NEXT:    vmv.v.v v8, v16
3341; CHECK-NEXT:    ret
3342  %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)
3343  %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)
3344  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3345  ret <vscale x 32 x half> %v
3346}
3347
3348define <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) {
3349; CHECK-LABEL: vfnmadd_vv_nxv32f16_commuted:
3350; CHECK:       # %bb.0:
3351; CHECK-NEXT:    vl8re16.v v24, (a0)
3352; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3353; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
3354; CHECK-NEXT:    ret
3355  %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)
3356  %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)
3357  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3358  ret <vscale x 32 x half> %v
3359}
3360
3361define <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) {
3362; CHECK-LABEL: vfnmadd_vv_nxv32f16_unmasked:
3363; CHECK:       # %bb.0:
3364; CHECK-NEXT:    vl8re16.v v24, (a0)
3365; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3366; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
3367; CHECK-NEXT:    ret
3368  %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)
3369  %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)
3370  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3371  ret <vscale x 32 x half> %v
3372}
3373
3374define <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) {
3375; CHECK-LABEL: vfnmadd_vv_nxv32f16_unmasked_commuted:
3376; CHECK:       # %bb.0:
3377; CHECK-NEXT:    vl8re16.v v24, (a0)
3378; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3379; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
3380; CHECK-NEXT:    ret
3381  %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)
3382  %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)
3383  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3384  ret <vscale x 32 x half> %v
3385}
3386
3387define <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) {
3388; CHECK-LABEL: vfnmadd_vf_nxv32f16:
3389; CHECK:       # %bb.0:
3390; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3391; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3392; CHECK-NEXT:    ret
3393  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3394  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3395  %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)
3396  %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)
3397  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3398  ret <vscale x 32 x half> %v
3399}
3400
3401define <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) {
3402; CHECK-LABEL: vfnmadd_vf_nxv32f16_commute:
3403; CHECK:       # %bb.0:
3404; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3405; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3406; CHECK-NEXT:    ret
3407  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3408  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3409  %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)
3410  %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)
3411  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3412  ret <vscale x 32 x half> %v
3413}
3414
3415define <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) {
3416; CHECK-LABEL: vfnmadd_vf_nxv32f16_unmasked:
3417; CHECK:       # %bb.0:
3418; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3419; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3420; CHECK-NEXT:    ret
3421  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3422  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3423  %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)
3424  %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)
3425  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3426  ret <vscale x 32 x half> %v
3427}
3428
3429define <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) {
3430; CHECK-LABEL: vfnmadd_vf_nxv32f16_unmasked_commute:
3431; CHECK:       # %bb.0:
3432; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3433; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3434; CHECK-NEXT:    ret
3435  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3436  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3437  %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)
3438  %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)
3439  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3440  ret <vscale x 32 x half> %v
3441}
3442
3443define <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) {
3444; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat:
3445; CHECK:       # %bb.0:
3446; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3447; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3448; CHECK-NEXT:    ret
3449  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3450  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3451  %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)
3452  %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)
3453  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3454  ret <vscale x 32 x half> %v
3455}
3456
3457define <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) {
3458; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_commute:
3459; CHECK:       # %bb.0:
3460; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3461; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3462; CHECK-NEXT:    ret
3463  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3464  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3465  %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)
3466  %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)
3467  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3468  ret <vscale x 32 x half> %v
3469}
3470
3471define <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) {
3472; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked:
3473; CHECK:       # %bb.0:
3474; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3475; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3476; CHECK-NEXT:    ret
3477  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3478  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3479  %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)
3480  %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)
3481  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3482  ret <vscale x 32 x half> %v
3483}
3484
3485define <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) {
3486; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked_commute:
3487; CHECK:       # %bb.0:
3488; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3489; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3490; CHECK-NEXT:    ret
3491  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3492  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3493  %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)
3494  %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)
3495  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3496  ret <vscale x 32 x half> %v
3497}
3498
3499define <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) {
3500; CHECK-LABEL: vfnmsub_vv_nxv32f16:
3501; CHECK:       # %bb.0:
3502; CHECK-NEXT:    vl8re16.v v24, (a0)
3503; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3504; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
3505; CHECK-NEXT:    vmv.v.v v8, v16
3506; CHECK-NEXT:    ret
3507  %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)
3508  %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)
3509  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3510  ret <vscale x 32 x half> %v
3511}
3512
3513define <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) {
3514; CHECK-LABEL: vfnmsub_vv_nxv32f16_commuted:
3515; CHECK:       # %bb.0:
3516; CHECK-NEXT:    vl8re16.v v24, (a0)
3517; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3518; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
3519; CHECK-NEXT:    ret
3520  %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)
3521  %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)
3522  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3523  ret <vscale x 32 x half> %v
3524}
3525
3526define <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) {
3527; CHECK-LABEL: vfnmsub_vv_nxv32f16_unmasked:
3528; CHECK:       # %bb.0:
3529; CHECK-NEXT:    vl8re16.v v24, (a0)
3530; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3531; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
3532; CHECK-NEXT:    ret
3533  %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)
3534  %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)
3535  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3536  ret <vscale x 32 x half> %v
3537}
3538
3539define <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) {
3540; CHECK-LABEL: vfnmsub_vv_nxv32f16_unmasked_commuted:
3541; CHECK:       # %bb.0:
3542; CHECK-NEXT:    vl8re16.v v24, (a0)
3543; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3544; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
3545; CHECK-NEXT:    ret
3546  %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)
3547  %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)
3548  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3549  ret <vscale x 32 x half> %v
3550}
3551
3552define <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) {
3553; CHECK-LABEL: vfnmsub_vf_nxv32f16:
3554; CHECK:       # %bb.0:
3555; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3556; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3557; CHECK-NEXT:    ret
3558  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3559  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3560  %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)
3561  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3562  ret <vscale x 32 x half> %v
3563}
3564
3565define <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) {
3566; CHECK-LABEL: vfnmsub_vf_nxv32f16_commute:
3567; CHECK:       # %bb.0:
3568; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3569; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3570; CHECK-NEXT:    ret
3571  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3572  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3573  %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)
3574  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3575  ret <vscale x 32 x half> %v
3576}
3577
3578define <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) {
3579; CHECK-LABEL: vfnmsub_vf_nxv32f16_unmasked:
3580; CHECK:       # %bb.0:
3581; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3582; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
3583; CHECK-NEXT:    ret
3584  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3585  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3586  %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)
3587  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3588  ret <vscale x 32 x half> %v
3589}
3590
3591define <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) {
3592; CHECK-LABEL: vfnmsub_vf_nxv32f16_unmasked_commute:
3593; CHECK:       # %bb.0:
3594; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3595; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
3596; CHECK-NEXT:    ret
3597  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3598  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3599  %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)
3600  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3601  ret <vscale x 32 x half> %v
3602}
3603
3604define <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) {
3605; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat:
3606; CHECK:       # %bb.0:
3607; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3608; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3609; CHECK-NEXT:    ret
3610  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3611  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3612  %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)
3613  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3614  ret <vscale x 32 x half> %v
3615}
3616
3617define <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) {
3618; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_commute:
3619; CHECK:       # %bb.0:
3620; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3621; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3622; CHECK-NEXT:    ret
3623  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3624  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3625  %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)
3626  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3627  ret <vscale x 32 x half> %v
3628}
3629
3630define <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) {
3631; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked:
3632; CHECK:       # %bb.0:
3633; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3634; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
3635; CHECK-NEXT:    ret
3636  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3637  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3638  %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)
3639  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3640  ret <vscale x 32 x half> %v
3641}
3642
3643define <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) {
3644; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked_commute:
3645; CHECK:       # %bb.0:
3646; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3647; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
3648; CHECK-NEXT:    ret
3649  %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3650  %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3651  %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)
3652  %v = call <vscale x 32 x half> @llvm.vp.fmuladd.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)
3653  ret <vscale x 32 x half> %v
3654}
3655
3656declare <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
3657
3658define <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) {
3659; CHECK-LABEL: vfmsub_vv_nxv1f32:
3660; CHECK:       # %bb.0:
3661; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3662; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
3663; CHECK-NEXT:    vmv1r.v v8, v9
3664; CHECK-NEXT:    ret
3665  %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)
3666  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3667  ret <vscale x 1 x float> %v
3668}
3669
3670define <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) {
3671; CHECK-LABEL: vfmsub_vv_nxv1f32_unmasked:
3672; CHECK:       # %bb.0:
3673; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3674; CHECK-NEXT:    vfmsub.vv v8, v9, v10
3675; CHECK-NEXT:    ret
3676  %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)
3677  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3678  ret <vscale x 1 x float> %v
3679}
3680
3681define <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) {
3682; CHECK-LABEL: vfmsub_vf_nxv1f32:
3683; CHECK:       # %bb.0:
3684; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3685; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
3686; CHECK-NEXT:    ret
3687  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3688  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3689  %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)
3690  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3691  ret <vscale x 1 x float> %v
3692}
3693
3694define <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) {
3695; CHECK-LABEL: vfmsub_vf_nxv1f32_commute:
3696; CHECK:       # %bb.0:
3697; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3698; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
3699; CHECK-NEXT:    ret
3700  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3701  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3702  %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)
3703  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3704  ret <vscale x 1 x float> %v
3705}
3706
3707define <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) {
3708; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked:
3709; CHECK:       # %bb.0:
3710; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3711; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
3712; CHECK-NEXT:    ret
3713  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3714  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3715  %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)
3716  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3717  ret <vscale x 1 x float> %v
3718}
3719
3720define <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) {
3721; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked_commute:
3722; CHECK:       # %bb.0:
3723; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3724; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
3725; CHECK-NEXT:    ret
3726  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3727  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3728  %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)
3729  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3730  ret <vscale x 1 x float> %v
3731}
3732
3733define <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) {
3734; CHECK-LABEL: vfnmadd_vv_nxv1f32:
3735; CHECK:       # %bb.0:
3736; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3737; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
3738; CHECK-NEXT:    vmv1r.v v8, v9
3739; CHECK-NEXT:    ret
3740  %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)
3741  %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)
3742  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3743  ret <vscale x 1 x float> %v
3744}
3745
3746define <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) {
3747; CHECK-LABEL: vfnmadd_vv_nxv1f32_commuted:
3748; CHECK:       # %bb.0:
3749; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3750; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
3751; CHECK-NEXT:    ret
3752  %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)
3753  %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)
3754  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3755  ret <vscale x 1 x float> %v
3756}
3757
3758define <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) {
3759; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked:
3760; CHECK:       # %bb.0:
3761; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3762; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
3763; CHECK-NEXT:    ret
3764  %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)
3765  %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)
3766  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3767  ret <vscale x 1 x float> %v
3768}
3769
3770define <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) {
3771; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked_commuted:
3772; CHECK:       # %bb.0:
3773; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3774; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
3775; CHECK-NEXT:    ret
3776  %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)
3777  %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)
3778  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3779  ret <vscale x 1 x float> %v
3780}
3781
3782define <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) {
3783; CHECK-LABEL: vfnmadd_vf_nxv1f32:
3784; CHECK:       # %bb.0:
3785; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3786; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
3787; CHECK-NEXT:    ret
3788  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3789  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3790  %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)
3791  %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)
3792  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3793  ret <vscale x 1 x float> %v
3794}
3795
3796define <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) {
3797; CHECK-LABEL: vfnmadd_vf_nxv1f32_commute:
3798; CHECK:       # %bb.0:
3799; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3800; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
3801; CHECK-NEXT:    ret
3802  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3803  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3804  %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)
3805  %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)
3806  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3807  ret <vscale x 1 x float> %v
3808}
3809
3810define <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) {
3811; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked:
3812; CHECK:       # %bb.0:
3813; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3814; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
3815; CHECK-NEXT:    ret
3816  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3817  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3818  %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)
3819  %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)
3820  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3821  ret <vscale x 1 x float> %v
3822}
3823
3824define <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) {
3825; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked_commute:
3826; CHECK:       # %bb.0:
3827; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3828; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
3829; CHECK-NEXT:    ret
3830  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3831  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3832  %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)
3833  %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)
3834  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3835  ret <vscale x 1 x float> %v
3836}
3837
3838define <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) {
3839; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat:
3840; CHECK:       # %bb.0:
3841; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3842; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
3843; CHECK-NEXT:    ret
3844  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3845  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3846  %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)
3847  %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)
3848  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3849  ret <vscale x 1 x float> %v
3850}
3851
3852define <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) {
3853; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_commute:
3854; CHECK:       # %bb.0:
3855; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3856; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
3857; CHECK-NEXT:    ret
3858  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3859  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3860  %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)
3861  %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)
3862  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3863  ret <vscale x 1 x float> %v
3864}
3865
3866define <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) {
3867; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked:
3868; CHECK:       # %bb.0:
3869; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3870; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
3871; CHECK-NEXT:    ret
3872  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3873  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3874  %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)
3875  %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)
3876  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3877  ret <vscale x 1 x float> %v
3878}
3879
3880define <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) {
3881; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked_commute:
3882; CHECK:       # %bb.0:
3883; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3884; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
3885; CHECK-NEXT:    ret
3886  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3887  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3888  %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)
3889  %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)
3890  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3891  ret <vscale x 1 x float> %v
3892}
3893
3894define <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) {
3895; CHECK-LABEL: vfnmsub_vv_nxv1f32:
3896; CHECK:       # %bb.0:
3897; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3898; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
3899; CHECK-NEXT:    vmv1r.v v8, v9
3900; CHECK-NEXT:    ret
3901  %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)
3902  %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)
3903  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3904  ret <vscale x 1 x float> %v
3905}
3906
3907define <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) {
3908; CHECK-LABEL: vfnmsub_vv_nxv1f32_commuted:
3909; CHECK:       # %bb.0:
3910; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3911; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
3912; CHECK-NEXT:    ret
3913  %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)
3914  %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)
3915  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3916  ret <vscale x 1 x float> %v
3917}
3918
3919define <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) {
3920; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked:
3921; CHECK:       # %bb.0:
3922; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3923; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
3924; CHECK-NEXT:    ret
3925  %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)
3926  %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)
3927  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3928  ret <vscale x 1 x float> %v
3929}
3930
3931define <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) {
3932; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked_commuted:
3933; CHECK:       # %bb.0:
3934; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3935; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
3936; CHECK-NEXT:    ret
3937  %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)
3938  %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)
3939  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3940  ret <vscale x 1 x float> %v
3941}
3942
3943define <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) {
3944; CHECK-LABEL: vfnmsub_vf_nxv1f32:
3945; CHECK:       # %bb.0:
3946; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3947; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
3948; CHECK-NEXT:    ret
3949  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3950  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3951  %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)
3952  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3953  ret <vscale x 1 x float> %v
3954}
3955
3956define <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) {
3957; CHECK-LABEL: vfnmsub_vf_nxv1f32_commute:
3958; CHECK:       # %bb.0:
3959; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3960; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
3961; CHECK-NEXT:    ret
3962  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3963  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3964  %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)
3965  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3966  ret <vscale x 1 x float> %v
3967}
3968
3969define <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) {
3970; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked:
3971; CHECK:       # %bb.0:
3972; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3973; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
3974; CHECK-NEXT:    ret
3975  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3976  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3977  %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)
3978  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3979  ret <vscale x 1 x float> %v
3980}
3981
3982define <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) {
3983; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked_commute:
3984; CHECK:       # %bb.0:
3985; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3986; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
3987; CHECK-NEXT:    ret
3988  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3989  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3990  %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)
3991  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
3992  ret <vscale x 1 x float> %v
3993}
3994
3995define <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) {
3996; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat:
3997; CHECK:       # %bb.0:
3998; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3999; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4000; CHECK-NEXT:    ret
4001  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4002  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4003  %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)
4004  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
4005  ret <vscale x 1 x float> %v
4006}
4007
4008define <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) {
4009; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_commute:
4010; CHECK:       # %bb.0:
4011; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4012; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4013; CHECK-NEXT:    ret
4014  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4015  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4016  %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)
4017  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
4018  ret <vscale x 1 x float> %v
4019}
4020
4021define <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) {
4022; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked:
4023; CHECK:       # %bb.0:
4024; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4025; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4026; CHECK-NEXT:    ret
4027  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4028  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4029  %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)
4030  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
4031  ret <vscale x 1 x float> %v
4032}
4033
4034define <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) {
4035; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked_commute:
4036; CHECK:       # %bb.0:
4037; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4038; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4039; CHECK-NEXT:    ret
4040  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4041  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4042  %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)
4043  %v = call <vscale x 1 x float> @llvm.vp.fmuladd.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)
4044  ret <vscale x 1 x float> %v
4045}
4046
4047declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
4048
4049define <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) {
4050; CHECK-LABEL: vfmsub_vv_nxv2f32:
4051; CHECK:       # %bb.0:
4052; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4053; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
4054; CHECK-NEXT:    vmv.v.v v8, v9
4055; CHECK-NEXT:    ret
4056  %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)
4057  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4058  ret <vscale x 2 x float> %v
4059}
4060
4061define <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) {
4062; CHECK-LABEL: vfmsub_vv_nxv2f32_unmasked:
4063; CHECK:       # %bb.0:
4064; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4065; CHECK-NEXT:    vfmsub.vv v8, v9, v10
4066; CHECK-NEXT:    ret
4067  %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)
4068  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4069  ret <vscale x 2 x float> %v
4070}
4071
4072define <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) {
4073; CHECK-LABEL: vfmsub_vf_nxv2f32:
4074; CHECK:       # %bb.0:
4075; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4076; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
4077; CHECK-NEXT:    ret
4078  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4079  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4080  %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)
4081  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4082  ret <vscale x 2 x float> %v
4083}
4084
4085define <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) {
4086; CHECK-LABEL: vfmsub_vf_nxv2f32_commute:
4087; CHECK:       # %bb.0:
4088; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4089; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
4090; CHECK-NEXT:    ret
4091  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4092  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4093  %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)
4094  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4095  ret <vscale x 2 x float> %v
4096}
4097
4098define <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) {
4099; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked:
4100; CHECK:       # %bb.0:
4101; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4102; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
4103; CHECK-NEXT:    ret
4104  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4105  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4106  %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)
4107  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4108  ret <vscale x 2 x float> %v
4109}
4110
4111define <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) {
4112; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked_commute:
4113; CHECK:       # %bb.0:
4114; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4115; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
4116; CHECK-NEXT:    ret
4117  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4118  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4119  %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)
4120  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4121  ret <vscale x 2 x float> %v
4122}
4123
4124define <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) {
4125; CHECK-LABEL: vfnmadd_vv_nxv2f32:
4126; CHECK:       # %bb.0:
4127; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4128; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
4129; CHECK-NEXT:    vmv.v.v v8, v9
4130; CHECK-NEXT:    ret
4131  %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)
4132  %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)
4133  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4134  ret <vscale x 2 x float> %v
4135}
4136
4137define <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) {
4138; CHECK-LABEL: vfnmadd_vv_nxv2f32_commuted:
4139; CHECK:       # %bb.0:
4140; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4141; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4142; CHECK-NEXT:    ret
4143  %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)
4144  %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)
4145  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4146  ret <vscale x 2 x float> %v
4147}
4148
4149define <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) {
4150; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked:
4151; CHECK:       # %bb.0:
4152; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4153; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4154; CHECK-NEXT:    ret
4155  %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)
4156  %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)
4157  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4158  ret <vscale x 2 x float> %v
4159}
4160
4161define <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) {
4162; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked_commuted:
4163; CHECK:       # %bb.0:
4164; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4165; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4166; CHECK-NEXT:    ret
4167  %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)
4168  %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)
4169  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4170  ret <vscale x 2 x float> %v
4171}
4172
4173define <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) {
4174; CHECK-LABEL: vfnmadd_vf_nxv2f32:
4175; CHECK:       # %bb.0:
4176; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4177; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4178; CHECK-NEXT:    ret
4179  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4180  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4181  %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)
4182  %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)
4183  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4184  ret <vscale x 2 x float> %v
4185}
4186
4187define <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) {
4188; CHECK-LABEL: vfnmadd_vf_nxv2f32_commute:
4189; CHECK:       # %bb.0:
4190; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4191; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4192; CHECK-NEXT:    ret
4193  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4194  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4195  %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)
4196  %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)
4197  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4198  ret <vscale x 2 x float> %v
4199}
4200
4201define <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) {
4202; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked:
4203; CHECK:       # %bb.0:
4204; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4205; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4206; CHECK-NEXT:    ret
4207  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4208  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4209  %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)
4210  %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)
4211  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4212  ret <vscale x 2 x float> %v
4213}
4214
4215define <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) {
4216; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked_commute:
4217; CHECK:       # %bb.0:
4218; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4219; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4220; CHECK-NEXT:    ret
4221  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4222  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4223  %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)
4224  %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)
4225  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4226  ret <vscale x 2 x float> %v
4227}
4228
4229define <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) {
4230; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat:
4231; CHECK:       # %bb.0:
4232; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4233; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4234; CHECK-NEXT:    ret
4235  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4236  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4237  %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)
4238  %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)
4239  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4240  ret <vscale x 2 x float> %v
4241}
4242
4243define <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) {
4244; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_commute:
4245; CHECK:       # %bb.0:
4246; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4247; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4248; CHECK-NEXT:    ret
4249  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4250  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4251  %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)
4252  %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)
4253  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4254  ret <vscale x 2 x float> %v
4255}
4256
4257define <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) {
4258; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked:
4259; CHECK:       # %bb.0:
4260; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4261; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4262; CHECK-NEXT:    ret
4263  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4264  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4265  %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)
4266  %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)
4267  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4268  ret <vscale x 2 x float> %v
4269}
4270
4271define <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) {
4272; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked_commute:
4273; CHECK:       # %bb.0:
4274; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4275; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4276; CHECK-NEXT:    ret
4277  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4278  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4279  %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)
4280  %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)
4281  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4282  ret <vscale x 2 x float> %v
4283}
4284
4285define <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) {
4286; CHECK-LABEL: vfnmsub_vv_nxv2f32:
4287; CHECK:       # %bb.0:
4288; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4289; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
4290; CHECK-NEXT:    vmv.v.v v8, v9
4291; CHECK-NEXT:    ret
4292  %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)
4293  %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)
4294  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4295  ret <vscale x 2 x float> %v
4296}
4297
4298define <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) {
4299; CHECK-LABEL: vfnmsub_vv_nxv2f32_commuted:
4300; CHECK:       # %bb.0:
4301; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4302; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4303; CHECK-NEXT:    ret
4304  %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)
4305  %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)
4306  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4307  ret <vscale x 2 x float> %v
4308}
4309
4310define <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) {
4311; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked:
4312; CHECK:       # %bb.0:
4313; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4314; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4315; CHECK-NEXT:    ret
4316  %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)
4317  %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)
4318  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4319  ret <vscale x 2 x float> %v
4320}
4321
4322define <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) {
4323; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked_commuted:
4324; CHECK:       # %bb.0:
4325; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4326; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4327; CHECK-NEXT:    ret
4328  %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)
4329  %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)
4330  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4331  ret <vscale x 2 x float> %v
4332}
4333
4334define <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) {
4335; CHECK-LABEL: vfnmsub_vf_nxv2f32:
4336; CHECK:       # %bb.0:
4337; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4338; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4339; CHECK-NEXT:    ret
4340  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4341  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4342  %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)
4343  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4344  ret <vscale x 2 x float> %v
4345}
4346
4347define <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) {
4348; CHECK-LABEL: vfnmsub_vf_nxv2f32_commute:
4349; CHECK:       # %bb.0:
4350; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4351; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4352; CHECK-NEXT:    ret
4353  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4354  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4355  %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)
4356  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4357  ret <vscale x 2 x float> %v
4358}
4359
4360define <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) {
4361; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked:
4362; CHECK:       # %bb.0:
4363; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4364; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4365; CHECK-NEXT:    ret
4366  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4367  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4368  %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)
4369  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4370  ret <vscale x 2 x float> %v
4371}
4372
4373define <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) {
4374; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked_commute:
4375; CHECK:       # %bb.0:
4376; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4377; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4378; CHECK-NEXT:    ret
4379  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4380  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4381  %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)
4382  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4383  ret <vscale x 2 x float> %v
4384}
4385
4386define <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) {
4387; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat:
4388; CHECK:       # %bb.0:
4389; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4390; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4391; CHECK-NEXT:    ret
4392  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4393  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4394  %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)
4395  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4396  ret <vscale x 2 x float> %v
4397}
4398
4399define <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) {
4400; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_commute:
4401; CHECK:       # %bb.0:
4402; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4403; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4404; CHECK-NEXT:    ret
4405  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4406  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4407  %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)
4408  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4409  ret <vscale x 2 x float> %v
4410}
4411
4412define <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) {
4413; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked:
4414; CHECK:       # %bb.0:
4415; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4416; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4417; CHECK-NEXT:    ret
4418  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4419  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4420  %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)
4421  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4422  ret <vscale x 2 x float> %v
4423}
4424
4425define <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) {
4426; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked_commute:
4427; CHECK:       # %bb.0:
4428; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4429; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4430; CHECK-NEXT:    ret
4431  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4432  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4433  %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)
4434  %v = call <vscale x 2 x float> @llvm.vp.fmuladd.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)
4435  ret <vscale x 2 x float> %v
4436}
4437
4438declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
4439
4440define <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) {
4441; CHECK-LABEL: vfmsub_vv_nxv4f32:
4442; CHECK:       # %bb.0:
4443; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4444; CHECK-NEXT:    vfmsub.vv v10, v8, v12, v0.t
4445; CHECK-NEXT:    vmv.v.v v8, v10
4446; CHECK-NEXT:    ret
4447  %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)
4448  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4449  ret <vscale x 4 x float> %v
4450}
4451
4452define <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) {
4453; CHECK-LABEL: vfmsub_vv_nxv4f32_unmasked:
4454; CHECK:       # %bb.0:
4455; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4456; CHECK-NEXT:    vfmsub.vv v8, v10, v12
4457; CHECK-NEXT:    ret
4458  %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)
4459  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4460  ret <vscale x 4 x float> %v
4461}
4462
4463define <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) {
4464; CHECK-LABEL: vfmsub_vf_nxv4f32:
4465; CHECK:       # %bb.0:
4466; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4467; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
4468; CHECK-NEXT:    ret
4469  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4470  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4471  %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)
4472  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4473  ret <vscale x 4 x float> %v
4474}
4475
4476define <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) {
4477; CHECK-LABEL: vfmsub_vf_nxv4f32_commute:
4478; CHECK:       # %bb.0:
4479; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4480; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
4481; CHECK-NEXT:    ret
4482  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4483  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4484  %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)
4485  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4486  ret <vscale x 4 x float> %v
4487}
4488
4489define <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) {
4490; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked:
4491; CHECK:       # %bb.0:
4492; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4493; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
4494; CHECK-NEXT:    ret
4495  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4496  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4497  %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)
4498  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4499  ret <vscale x 4 x float> %v
4500}
4501
4502define <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) {
4503; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked_commute:
4504; CHECK:       # %bb.0:
4505; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4506; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
4507; CHECK-NEXT:    ret
4508  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4509  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4510  %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)
4511  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4512  ret <vscale x 4 x float> %v
4513}
4514
4515define <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) {
4516; CHECK-LABEL: vfnmadd_vv_nxv4f32:
4517; CHECK:       # %bb.0:
4518; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4519; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
4520; CHECK-NEXT:    vmv.v.v v8, v10
4521; CHECK-NEXT:    ret
4522  %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)
4523  %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)
4524  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4525  ret <vscale x 4 x float> %v
4526}
4527
4528define <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) {
4529; CHECK-LABEL: vfnmadd_vv_nxv4f32_commuted:
4530; CHECK:       # %bb.0:
4531; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4532; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
4533; CHECK-NEXT:    ret
4534  %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)
4535  %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)
4536  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4537  ret <vscale x 4 x float> %v
4538}
4539
4540define <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) {
4541; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked:
4542; CHECK:       # %bb.0:
4543; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4544; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4545; CHECK-NEXT:    ret
4546  %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)
4547  %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)
4548  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4549  ret <vscale x 4 x float> %v
4550}
4551
4552define <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) {
4553; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked_commuted:
4554; CHECK:       # %bb.0:
4555; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4556; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4557; CHECK-NEXT:    ret
4558  %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)
4559  %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)
4560  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4561  ret <vscale x 4 x float> %v
4562}
4563
4564define <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) {
4565; CHECK-LABEL: vfnmadd_vf_nxv4f32:
4566; CHECK:       # %bb.0:
4567; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4568; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4569; CHECK-NEXT:    ret
4570  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4571  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4572  %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)
4573  %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)
4574  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4575  ret <vscale x 4 x float> %v
4576}
4577
4578define <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) {
4579; CHECK-LABEL: vfnmadd_vf_nxv4f32_commute:
4580; CHECK:       # %bb.0:
4581; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4582; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4583; CHECK-NEXT:    ret
4584  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4585  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4586  %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)
4587  %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)
4588  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4589  ret <vscale x 4 x float> %v
4590}
4591
4592define <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) {
4593; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked:
4594; CHECK:       # %bb.0:
4595; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4596; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4597; CHECK-NEXT:    ret
4598  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4599  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4600  %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)
4601  %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)
4602  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4603  ret <vscale x 4 x float> %v
4604}
4605
4606define <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) {
4607; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked_commute:
4608; CHECK:       # %bb.0:
4609; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4610; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4611; CHECK-NEXT:    ret
4612  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4613  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4614  %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)
4615  %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)
4616  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4617  ret <vscale x 4 x float> %v
4618}
4619
4620define <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) {
4621; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat:
4622; CHECK:       # %bb.0:
4623; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4624; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4625; CHECK-NEXT:    ret
4626  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4627  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4628  %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)
4629  %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)
4630  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4631  ret <vscale x 4 x float> %v
4632}
4633
4634define <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) {
4635; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_commute:
4636; CHECK:       # %bb.0:
4637; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4638; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4639; CHECK-NEXT:    ret
4640  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4641  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4642  %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)
4643  %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)
4644  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4645  ret <vscale x 4 x float> %v
4646}
4647
4648define <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) {
4649; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked:
4650; CHECK:       # %bb.0:
4651; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4652; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4653; CHECK-NEXT:    ret
4654  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4655  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4656  %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)
4657  %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)
4658  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4659  ret <vscale x 4 x float> %v
4660}
4661
4662define <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) {
4663; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked_commute:
4664; CHECK:       # %bb.0:
4665; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4666; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4667; CHECK-NEXT:    ret
4668  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4669  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4670  %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)
4671  %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)
4672  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4673  ret <vscale x 4 x float> %v
4674}
4675
4676define <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) {
4677; CHECK-LABEL: vfnmsub_vv_nxv4f32:
4678; CHECK:       # %bb.0:
4679; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4680; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
4681; CHECK-NEXT:    vmv.v.v v8, v10
4682; CHECK-NEXT:    ret
4683  %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)
4684  %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)
4685  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4686  ret <vscale x 4 x float> %v
4687}
4688
4689define <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) {
4690; CHECK-LABEL: vfnmsub_vv_nxv4f32_commuted:
4691; CHECK:       # %bb.0:
4692; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4693; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
4694; CHECK-NEXT:    ret
4695  %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)
4696  %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)
4697  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4698  ret <vscale x 4 x float> %v
4699}
4700
4701define <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) {
4702; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked:
4703; CHECK:       # %bb.0:
4704; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4705; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4706; CHECK-NEXT:    ret
4707  %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)
4708  %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)
4709  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4710  ret <vscale x 4 x float> %v
4711}
4712
4713define <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) {
4714; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked_commuted:
4715; CHECK:       # %bb.0:
4716; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4717; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4718; CHECK-NEXT:    ret
4719  %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)
4720  %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)
4721  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4722  ret <vscale x 4 x float> %v
4723}
4724
4725define <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) {
4726; CHECK-LABEL: vfnmsub_vf_nxv4f32:
4727; CHECK:       # %bb.0:
4728; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4729; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
4730; CHECK-NEXT:    ret
4731  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4732  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4733  %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)
4734  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4735  ret <vscale x 4 x float> %v
4736}
4737
4738define <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) {
4739; CHECK-LABEL: vfnmsub_vf_nxv4f32_commute:
4740; CHECK:       # %bb.0:
4741; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4742; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
4743; CHECK-NEXT:    ret
4744  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4745  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4746  %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)
4747  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4748  ret <vscale x 4 x float> %v
4749}
4750
4751define <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) {
4752; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked:
4753; CHECK:       # %bb.0:
4754; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4755; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
4756; CHECK-NEXT:    ret
4757  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4758  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4759  %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)
4760  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4761  ret <vscale x 4 x float> %v
4762}
4763
4764define <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) {
4765; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked_commute:
4766; CHECK:       # %bb.0:
4767; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4768; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
4769; CHECK-NEXT:    ret
4770  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4771  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4772  %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)
4773  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4774  ret <vscale x 4 x float> %v
4775}
4776
4777define <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) {
4778; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat:
4779; CHECK:       # %bb.0:
4780; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4781; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
4782; CHECK-NEXT:    ret
4783  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4784  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4785  %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)
4786  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4787  ret <vscale x 4 x float> %v
4788}
4789
4790define <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) {
4791; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_commute:
4792; CHECK:       # %bb.0:
4793; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4794; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
4795; CHECK-NEXT:    ret
4796  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4797  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4798  %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)
4799  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4800  ret <vscale x 4 x float> %v
4801}
4802
4803define <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) {
4804; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked:
4805; CHECK:       # %bb.0:
4806; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4807; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
4808; CHECK-NEXT:    ret
4809  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4810  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4811  %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)
4812  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4813  ret <vscale x 4 x float> %v
4814}
4815
4816define <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) {
4817; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked_commute:
4818; CHECK:       # %bb.0:
4819; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4820; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
4821; CHECK-NEXT:    ret
4822  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4823  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4824  %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)
4825  %v = call <vscale x 4 x float> @llvm.vp.fmuladd.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)
4826  ret <vscale x 4 x float> %v
4827}
4828
4829declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
4830
4831define <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) {
4832; CHECK-LABEL: vfmsub_vv_nxv8f32:
4833; CHECK:       # %bb.0:
4834; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4835; CHECK-NEXT:    vfmsub.vv v12, v8, v16, v0.t
4836; CHECK-NEXT:    vmv.v.v v8, v12
4837; CHECK-NEXT:    ret
4838  %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)
4839  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4840  ret <vscale x 8 x float> %v
4841}
4842
4843define <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) {
4844; CHECK-LABEL: vfmsub_vv_nxv8f32_unmasked:
4845; CHECK:       # %bb.0:
4846; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4847; CHECK-NEXT:    vfmsub.vv v8, v12, v16
4848; CHECK-NEXT:    ret
4849  %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)
4850  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4851  ret <vscale x 8 x float> %v
4852}
4853
4854define <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) {
4855; CHECK-LABEL: vfmsub_vf_nxv8f32:
4856; CHECK:       # %bb.0:
4857; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4858; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
4859; CHECK-NEXT:    ret
4860  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4861  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4862  %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)
4863  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4864  ret <vscale x 8 x float> %v
4865}
4866
4867define <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) {
4868; CHECK-LABEL: vfmsub_vf_nxv8f32_commute:
4869; CHECK:       # %bb.0:
4870; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4871; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
4872; CHECK-NEXT:    ret
4873  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4874  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4875  %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)
4876  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4877  ret <vscale x 8 x float> %v
4878}
4879
4880define <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) {
4881; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked:
4882; CHECK:       # %bb.0:
4883; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4884; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
4885; CHECK-NEXT:    ret
4886  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4887  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4888  %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)
4889  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4890  ret <vscale x 8 x float> %v
4891}
4892
4893define <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) {
4894; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked_commute:
4895; CHECK:       # %bb.0:
4896; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4897; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
4898; CHECK-NEXT:    ret
4899  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4900  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4901  %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)
4902  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4903  ret <vscale x 8 x float> %v
4904}
4905
4906define <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) {
4907; CHECK-LABEL: vfnmadd_vv_nxv8f32:
4908; CHECK:       # %bb.0:
4909; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4910; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
4911; CHECK-NEXT:    vmv.v.v v8, v12
4912; CHECK-NEXT:    ret
4913  %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)
4914  %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)
4915  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4916  ret <vscale x 8 x float> %v
4917}
4918
4919define <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) {
4920; CHECK-LABEL: vfnmadd_vv_nxv8f32_commuted:
4921; CHECK:       # %bb.0:
4922; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4923; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
4924; CHECK-NEXT:    ret
4925  %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)
4926  %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)
4927  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4928  ret <vscale x 8 x float> %v
4929}
4930
4931define <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) {
4932; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked:
4933; CHECK:       # %bb.0:
4934; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4935; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
4936; CHECK-NEXT:    ret
4937  %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)
4938  %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)
4939  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4940  ret <vscale x 8 x float> %v
4941}
4942
4943define <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) {
4944; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked_commuted:
4945; CHECK:       # %bb.0:
4946; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4947; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
4948; CHECK-NEXT:    ret
4949  %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)
4950  %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)
4951  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4952  ret <vscale x 8 x float> %v
4953}
4954
4955define <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) {
4956; CHECK-LABEL: vfnmadd_vf_nxv8f32:
4957; CHECK:       # %bb.0:
4958; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4959; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
4960; CHECK-NEXT:    ret
4961  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4962  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4963  %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)
4964  %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)
4965  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4966  ret <vscale x 8 x float> %v
4967}
4968
4969define <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) {
4970; CHECK-LABEL: vfnmadd_vf_nxv8f32_commute:
4971; CHECK:       # %bb.0:
4972; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4973; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
4974; CHECK-NEXT:    ret
4975  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4976  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4977  %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)
4978  %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)
4979  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4980  ret <vscale x 8 x float> %v
4981}
4982
4983define <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) {
4984; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked:
4985; CHECK:       # %bb.0:
4986; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4987; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
4988; CHECK-NEXT:    ret
4989  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4990  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4991  %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)
4992  %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)
4993  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
4994  ret <vscale x 8 x float> %v
4995}
4996
4997define <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) {
4998; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked_commute:
4999; CHECK:       # %bb.0:
5000; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5001; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5002; CHECK-NEXT:    ret
5003  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5004  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5005  %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)
5006  %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)
5007  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5008  ret <vscale x 8 x float> %v
5009}
5010
5011define <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) {
5012; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat:
5013; CHECK:       # %bb.0:
5014; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5015; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
5016; CHECK-NEXT:    ret
5017  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5018  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5019  %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)
5020  %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)
5021  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5022  ret <vscale x 8 x float> %v
5023}
5024
5025define <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) {
5026; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_commute:
5027; CHECK:       # %bb.0:
5028; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5029; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
5030; CHECK-NEXT:    ret
5031  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5032  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5033  %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)
5034  %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)
5035  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5036  ret <vscale x 8 x float> %v
5037}
5038
5039define <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) {
5040; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked:
5041; CHECK:       # %bb.0:
5042; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5043; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5044; CHECK-NEXT:    ret
5045  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5046  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5047  %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)
5048  %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)
5049  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5050  ret <vscale x 8 x float> %v
5051}
5052
5053define <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) {
5054; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked_commute:
5055; CHECK:       # %bb.0:
5056; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5057; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5058; CHECK-NEXT:    ret
5059  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5060  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5061  %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)
5062  %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)
5063  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5064  ret <vscale x 8 x float> %v
5065}
5066
5067define <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) {
5068; CHECK-LABEL: vfnmsub_vv_nxv8f32:
5069; CHECK:       # %bb.0:
5070; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5071; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
5072; CHECK-NEXT:    vmv.v.v v8, v12
5073; CHECK-NEXT:    ret
5074  %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)
5075  %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)
5076  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5077  ret <vscale x 8 x float> %v
5078}
5079
5080define <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) {
5081; CHECK-LABEL: vfnmsub_vv_nxv8f32_commuted:
5082; CHECK:       # %bb.0:
5083; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5084; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
5085; CHECK-NEXT:    ret
5086  %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)
5087  %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)
5088  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5089  ret <vscale x 8 x float> %v
5090}
5091
5092define <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) {
5093; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked:
5094; CHECK:       # %bb.0:
5095; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5096; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
5097; CHECK-NEXT:    ret
5098  %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)
5099  %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)
5100  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5101  ret <vscale x 8 x float> %v
5102}
5103
5104define <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) {
5105; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked_commuted:
5106; CHECK:       # %bb.0:
5107; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5108; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
5109; CHECK-NEXT:    ret
5110  %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)
5111  %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)
5112  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5113  ret <vscale x 8 x float> %v
5114}
5115
5116define <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) {
5117; CHECK-LABEL: vfnmsub_vf_nxv8f32:
5118; CHECK:       # %bb.0:
5119; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5120; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5121; CHECK-NEXT:    ret
5122  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5123  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5124  %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)
5125  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5126  ret <vscale x 8 x float> %v
5127}
5128
5129define <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) {
5130; CHECK-LABEL: vfnmsub_vf_nxv8f32_commute:
5131; CHECK:       # %bb.0:
5132; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5133; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5134; CHECK-NEXT:    ret
5135  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5136  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5137  %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)
5138  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5139  ret <vscale x 8 x float> %v
5140}
5141
5142define <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) {
5143; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked:
5144; CHECK:       # %bb.0:
5145; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5146; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
5147; CHECK-NEXT:    ret
5148  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5149  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5150  %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)
5151  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5152  ret <vscale x 8 x float> %v
5153}
5154
5155define <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) {
5156; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked_commute:
5157; CHECK:       # %bb.0:
5158; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5159; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
5160; CHECK-NEXT:    ret
5161  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5162  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5163  %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)
5164  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5165  ret <vscale x 8 x float> %v
5166}
5167
5168define <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) {
5169; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat:
5170; CHECK:       # %bb.0:
5171; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5172; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5173; CHECK-NEXT:    ret
5174  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5175  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5176  %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)
5177  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5178  ret <vscale x 8 x float> %v
5179}
5180
5181define <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) {
5182; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_commute:
5183; CHECK:       # %bb.0:
5184; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5185; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5186; CHECK-NEXT:    ret
5187  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5188  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5189  %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)
5190  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5191  ret <vscale x 8 x float> %v
5192}
5193
5194define <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) {
5195; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked:
5196; CHECK:       # %bb.0:
5197; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5198; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
5199; CHECK-NEXT:    ret
5200  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5201  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5202  %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)
5203  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5204  ret <vscale x 8 x float> %v
5205}
5206
5207define <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) {
5208; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked_commute:
5209; CHECK:       # %bb.0:
5210; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5211; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
5212; CHECK-NEXT:    ret
5213  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5214  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5215  %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)
5216  %v = call <vscale x 8 x float> @llvm.vp.fmuladd.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)
5217  ret <vscale x 8 x float> %v
5218}
5219
5220declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
5221
5222define <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) {
5223; CHECK-LABEL: vfmsub_vv_nxv16f32:
5224; CHECK:       # %bb.0:
5225; CHECK-NEXT:    vl8re32.v v24, (a0)
5226; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5227; CHECK-NEXT:    vfmsub.vv v16, v8, v24, v0.t
5228; CHECK-NEXT:    vmv.v.v v8, v16
5229; CHECK-NEXT:    ret
5230  %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)
5231  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5232  ret <vscale x 16 x float> %v
5233}
5234
5235define <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) {
5236; CHECK-LABEL: vfmsub_vv_nxv16f32_unmasked:
5237; CHECK:       # %bb.0:
5238; CHECK-NEXT:    vl8re32.v v24, (a0)
5239; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5240; CHECK-NEXT:    vfmsub.vv v8, v16, v24
5241; CHECK-NEXT:    ret
5242  %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)
5243  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5244  ret <vscale x 16 x float> %v
5245}
5246
5247define <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) {
5248; CHECK-LABEL: vfmsub_vf_nxv16f32:
5249; CHECK:       # %bb.0:
5250; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5251; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
5252; CHECK-NEXT:    ret
5253  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5254  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5255  %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)
5256  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5257  ret <vscale x 16 x float> %v
5258}
5259
5260define <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) {
5261; CHECK-LABEL: vfmsub_vf_nxv16f32_commute:
5262; CHECK:       # %bb.0:
5263; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5264; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
5265; CHECK-NEXT:    ret
5266  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5267  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5268  %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)
5269  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5270  ret <vscale x 16 x float> %v
5271}
5272
5273define <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) {
5274; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked:
5275; CHECK:       # %bb.0:
5276; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5277; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
5278; CHECK-NEXT:    ret
5279  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5280  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5281  %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)
5282  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5283  ret <vscale x 16 x float> %v
5284}
5285
5286define <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) {
5287; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked_commute:
5288; CHECK:       # %bb.0:
5289; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5290; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
5291; CHECK-NEXT:    ret
5292  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5293  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5294  %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)
5295  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5296  ret <vscale x 16 x float> %v
5297}
5298
5299define <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) {
5300; CHECK-LABEL: vfnmadd_vv_nxv16f32:
5301; CHECK:       # %bb.0:
5302; CHECK-NEXT:    vl8re32.v v24, (a0)
5303; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5304; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
5305; CHECK-NEXT:    vmv.v.v v8, v16
5306; CHECK-NEXT:    ret
5307  %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)
5308  %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)
5309  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5310  ret <vscale x 16 x float> %v
5311}
5312
5313define <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) {
5314; CHECK-LABEL: vfnmadd_vv_nxv16f32_commuted:
5315; CHECK:       # %bb.0:
5316; CHECK-NEXT:    vl8re32.v v24, (a0)
5317; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5318; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
5319; CHECK-NEXT:    ret
5320  %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)
5321  %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)
5322  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5323  ret <vscale x 16 x float> %v
5324}
5325
5326define <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) {
5327; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked:
5328; CHECK:       # %bb.0:
5329; CHECK-NEXT:    vl8re32.v v24, (a0)
5330; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5331; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
5332; CHECK-NEXT:    ret
5333  %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)
5334  %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)
5335  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5336  ret <vscale x 16 x float> %v
5337}
5338
5339define <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) {
5340; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked_commuted:
5341; CHECK:       # %bb.0:
5342; CHECK-NEXT:    vl8re32.v v24, (a0)
5343; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5344; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
5345; CHECK-NEXT:    ret
5346  %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)
5347  %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)
5348  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5349  ret <vscale x 16 x float> %v
5350}
5351
5352define <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) {
5353; CHECK-LABEL: vfnmadd_vf_nxv16f32:
5354; CHECK:       # %bb.0:
5355; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5356; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5357; CHECK-NEXT:    ret
5358  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5359  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5360  %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)
5361  %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)
5362  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5363  ret <vscale x 16 x float> %v
5364}
5365
5366define <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) {
5367; CHECK-LABEL: vfnmadd_vf_nxv16f32_commute:
5368; CHECK:       # %bb.0:
5369; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5370; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5371; CHECK-NEXT:    ret
5372  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5373  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5374  %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)
5375  %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)
5376  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5377  ret <vscale x 16 x float> %v
5378}
5379
5380define <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) {
5381; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked:
5382; CHECK:       # %bb.0:
5383; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5384; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5385; CHECK-NEXT:    ret
5386  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5387  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5388  %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)
5389  %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)
5390  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5391  ret <vscale x 16 x float> %v
5392}
5393
5394define <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) {
5395; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked_commute:
5396; CHECK:       # %bb.0:
5397; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5398; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5399; CHECK-NEXT:    ret
5400  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5401  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5402  %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)
5403  %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)
5404  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5405  ret <vscale x 16 x float> %v
5406}
5407
5408define <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) {
5409; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat:
5410; CHECK:       # %bb.0:
5411; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5412; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5413; CHECK-NEXT:    ret
5414  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5415  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5416  %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)
5417  %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)
5418  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5419  ret <vscale x 16 x float> %v
5420}
5421
5422define <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) {
5423; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_commute:
5424; CHECK:       # %bb.0:
5425; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5426; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5427; CHECK-NEXT:    ret
5428  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5429  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5430  %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)
5431  %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)
5432  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5433  ret <vscale x 16 x float> %v
5434}
5435
5436define <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) {
5437; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked:
5438; CHECK:       # %bb.0:
5439; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5440; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5441; CHECK-NEXT:    ret
5442  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5443  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5444  %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)
5445  %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)
5446  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5447  ret <vscale x 16 x float> %v
5448}
5449
5450define <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) {
5451; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked_commute:
5452; CHECK:       # %bb.0:
5453; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5454; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5455; CHECK-NEXT:    ret
5456  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5457  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5458  %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)
5459  %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)
5460  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5461  ret <vscale x 16 x float> %v
5462}
5463
5464define <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) {
5465; CHECK-LABEL: vfnmsub_vv_nxv16f32:
5466; CHECK:       # %bb.0:
5467; CHECK-NEXT:    vl8re32.v v24, (a0)
5468; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5469; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
5470; CHECK-NEXT:    vmv.v.v v8, v16
5471; CHECK-NEXT:    ret
5472  %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)
5473  %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)
5474  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5475  ret <vscale x 16 x float> %v
5476}
5477
5478define <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) {
5479; CHECK-LABEL: vfnmsub_vv_nxv16f32_commuted:
5480; CHECK:       # %bb.0:
5481; CHECK-NEXT:    vl8re32.v v24, (a0)
5482; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5483; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
5484; CHECK-NEXT:    ret
5485  %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)
5486  %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)
5487  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5488  ret <vscale x 16 x float> %v
5489}
5490
5491define <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) {
5492; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked:
5493; CHECK:       # %bb.0:
5494; CHECK-NEXT:    vl8re32.v v24, (a0)
5495; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5496; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
5497; CHECK-NEXT:    ret
5498  %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)
5499  %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)
5500  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5501  ret <vscale x 16 x float> %v
5502}
5503
5504define <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) {
5505; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked_commuted:
5506; CHECK:       # %bb.0:
5507; CHECK-NEXT:    vl8re32.v v24, (a0)
5508; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5509; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
5510; CHECK-NEXT:    ret
5511  %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)
5512  %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)
5513  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5514  ret <vscale x 16 x float> %v
5515}
5516
5517define <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) {
5518; CHECK-LABEL: vfnmsub_vf_nxv16f32:
5519; CHECK:       # %bb.0:
5520; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5521; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5522; CHECK-NEXT:    ret
5523  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5524  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5525  %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)
5526  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5527  ret <vscale x 16 x float> %v
5528}
5529
5530define <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) {
5531; CHECK-LABEL: vfnmsub_vf_nxv16f32_commute:
5532; CHECK:       # %bb.0:
5533; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5534; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5535; CHECK-NEXT:    ret
5536  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5537  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5538  %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)
5539  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5540  ret <vscale x 16 x float> %v
5541}
5542
5543define <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) {
5544; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked:
5545; CHECK:       # %bb.0:
5546; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5547; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
5548; CHECK-NEXT:    ret
5549  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5550  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5551  %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)
5552  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5553  ret <vscale x 16 x float> %v
5554}
5555
5556define <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) {
5557; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked_commute:
5558; CHECK:       # %bb.0:
5559; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5560; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
5561; CHECK-NEXT:    ret
5562  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5563  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5564  %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)
5565  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5566  ret <vscale x 16 x float> %v
5567}
5568
5569define <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) {
5570; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat:
5571; CHECK:       # %bb.0:
5572; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5573; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5574; CHECK-NEXT:    ret
5575  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5576  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5577  %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)
5578  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5579  ret <vscale x 16 x float> %v
5580}
5581
5582define <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) {
5583; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_commute:
5584; CHECK:       # %bb.0:
5585; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5586; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5587; CHECK-NEXT:    ret
5588  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5589  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5590  %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)
5591  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5592  ret <vscale x 16 x float> %v
5593}
5594
5595define <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) {
5596; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked:
5597; CHECK:       # %bb.0:
5598; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5599; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
5600; CHECK-NEXT:    ret
5601  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5602  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5603  %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)
5604  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5605  ret <vscale x 16 x float> %v
5606}
5607
5608define <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) {
5609; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked_commute:
5610; CHECK:       # %bb.0:
5611; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5612; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
5613; CHECK-NEXT:    ret
5614  %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5615  %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5616  %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)
5617  %v = call <vscale x 16 x float> @llvm.vp.fmuladd.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)
5618  ret <vscale x 16 x float> %v
5619}
5620
5621declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
5622
5623define <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) {
5624; CHECK-LABEL: vfmsub_vv_nxv1f64:
5625; CHECK:       # %bb.0:
5626; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5627; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
5628; CHECK-NEXT:    vmv.v.v v8, v9
5629; CHECK-NEXT:    ret
5630  %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)
5631  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5632  ret <vscale x 1 x double> %v
5633}
5634
5635define <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) {
5636; CHECK-LABEL: vfmsub_vv_nxv1f64_unmasked:
5637; CHECK:       # %bb.0:
5638; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5639; CHECK-NEXT:    vfmsub.vv v8, v9, v10
5640; CHECK-NEXT:    ret
5641  %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)
5642  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5643  ret <vscale x 1 x double> %v
5644}
5645
5646define <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) {
5647; CHECK-LABEL: vfmsub_vf_nxv1f64:
5648; CHECK:       # %bb.0:
5649; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5650; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
5651; CHECK-NEXT:    ret
5652  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5653  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5654  %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)
5655  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5656  ret <vscale x 1 x double> %v
5657}
5658
5659define <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) {
5660; CHECK-LABEL: vfmsub_vf_nxv1f64_commute:
5661; CHECK:       # %bb.0:
5662; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5663; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
5664; CHECK-NEXT:    ret
5665  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5666  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5667  %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)
5668  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5669  ret <vscale x 1 x double> %v
5670}
5671
5672define <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) {
5673; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked:
5674; CHECK:       # %bb.0:
5675; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5676; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
5677; CHECK-NEXT:    ret
5678  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5679  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5680  %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)
5681  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5682  ret <vscale x 1 x double> %v
5683}
5684
5685define <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) {
5686; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked_commute:
5687; CHECK:       # %bb.0:
5688; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5689; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
5690; CHECK-NEXT:    ret
5691  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5692  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5693  %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)
5694  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5695  ret <vscale x 1 x double> %v
5696}
5697
5698define <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) {
5699; CHECK-LABEL: vfnmadd_vv_nxv1f64:
5700; CHECK:       # %bb.0:
5701; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5702; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
5703; CHECK-NEXT:    vmv.v.v v8, v9
5704; CHECK-NEXT:    ret
5705  %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)
5706  %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)
5707  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5708  ret <vscale x 1 x double> %v
5709}
5710
5711define <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) {
5712; CHECK-LABEL: vfnmadd_vv_nxv1f64_commuted:
5713; CHECK:       # %bb.0:
5714; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5715; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
5716; CHECK-NEXT:    ret
5717  %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)
5718  %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)
5719  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5720  ret <vscale x 1 x double> %v
5721}
5722
5723define <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) {
5724; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked:
5725; CHECK:       # %bb.0:
5726; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5727; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
5728; CHECK-NEXT:    ret
5729  %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)
5730  %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)
5731  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5732  ret <vscale x 1 x double> %v
5733}
5734
5735define <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) {
5736; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked_commuted:
5737; CHECK:       # %bb.0:
5738; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5739; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
5740; CHECK-NEXT:    ret
5741  %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)
5742  %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)
5743  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5744  ret <vscale x 1 x double> %v
5745}
5746
5747define <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) {
5748; CHECK-LABEL: vfnmadd_vf_nxv1f64:
5749; CHECK:       # %bb.0:
5750; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5751; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5752; CHECK-NEXT:    ret
5753  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5754  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5755  %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)
5756  %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)
5757  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5758  ret <vscale x 1 x double> %v
5759}
5760
5761define <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) {
5762; CHECK-LABEL: vfnmadd_vf_nxv1f64_commute:
5763; CHECK:       # %bb.0:
5764; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5765; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5766; CHECK-NEXT:    ret
5767  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5768  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5769  %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)
5770  %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)
5771  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5772  ret <vscale x 1 x double> %v
5773}
5774
5775define <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) {
5776; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked:
5777; CHECK:       # %bb.0:
5778; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5779; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
5780; CHECK-NEXT:    ret
5781  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5782  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5783  %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)
5784  %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)
5785  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5786  ret <vscale x 1 x double> %v
5787}
5788
5789define <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) {
5790; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked_commute:
5791; CHECK:       # %bb.0:
5792; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5793; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
5794; CHECK-NEXT:    ret
5795  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5796  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5797  %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)
5798  %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)
5799  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5800  ret <vscale x 1 x double> %v
5801}
5802
5803define <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) {
5804; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat:
5805; CHECK:       # %bb.0:
5806; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5807; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5808; CHECK-NEXT:    ret
5809  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5810  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5811  %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)
5812  %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)
5813  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5814  ret <vscale x 1 x double> %v
5815}
5816
5817define <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) {
5818; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_commute:
5819; CHECK:       # %bb.0:
5820; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5821; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5822; CHECK-NEXT:    ret
5823  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5824  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5825  %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)
5826  %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)
5827  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5828  ret <vscale x 1 x double> %v
5829}
5830
5831define <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) {
5832; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked:
5833; CHECK:       # %bb.0:
5834; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5835; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
5836; CHECK-NEXT:    ret
5837  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5838  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5839  %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)
5840  %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)
5841  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5842  ret <vscale x 1 x double> %v
5843}
5844
5845define <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) {
5846; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked_commute:
5847; CHECK:       # %bb.0:
5848; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5849; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
5850; CHECK-NEXT:    ret
5851  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5852  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5853  %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)
5854  %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)
5855  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5856  ret <vscale x 1 x double> %v
5857}
5858
5859define <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) {
5860; CHECK-LABEL: vfnmsub_vv_nxv1f64:
5861; CHECK:       # %bb.0:
5862; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5863; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
5864; CHECK-NEXT:    vmv.v.v v8, v9
5865; CHECK-NEXT:    ret
5866  %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)
5867  %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)
5868  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5869  ret <vscale x 1 x double> %v
5870}
5871
5872define <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) {
5873; CHECK-LABEL: vfnmsub_vv_nxv1f64_commuted:
5874; CHECK:       # %bb.0:
5875; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5876; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
5877; CHECK-NEXT:    ret
5878  %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)
5879  %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)
5880  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5881  ret <vscale x 1 x double> %v
5882}
5883
5884define <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) {
5885; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked:
5886; CHECK:       # %bb.0:
5887; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5888; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
5889; CHECK-NEXT:    ret
5890  %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)
5891  %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)
5892  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5893  ret <vscale x 1 x double> %v
5894}
5895
5896define <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) {
5897; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked_commuted:
5898; CHECK:       # %bb.0:
5899; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5900; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
5901; CHECK-NEXT:    ret
5902  %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)
5903  %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)
5904  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5905  ret <vscale x 1 x double> %v
5906}
5907
5908define <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) {
5909; CHECK-LABEL: vfnmsub_vf_nxv1f64:
5910; CHECK:       # %bb.0:
5911; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5912; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5913; CHECK-NEXT:    ret
5914  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5915  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5916  %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)
5917  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5918  ret <vscale x 1 x double> %v
5919}
5920
5921define <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) {
5922; CHECK-LABEL: vfnmsub_vf_nxv1f64_commute:
5923; CHECK:       # %bb.0:
5924; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5925; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5926; CHECK-NEXT:    ret
5927  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5928  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5929  %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)
5930  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5931  ret <vscale x 1 x double> %v
5932}
5933
5934define <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) {
5935; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked:
5936; CHECK:       # %bb.0:
5937; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5938; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
5939; CHECK-NEXT:    ret
5940  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5941  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5942  %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)
5943  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5944  ret <vscale x 1 x double> %v
5945}
5946
5947define <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) {
5948; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked_commute:
5949; CHECK:       # %bb.0:
5950; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5951; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
5952; CHECK-NEXT:    ret
5953  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5954  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5955  %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)
5956  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5957  ret <vscale x 1 x double> %v
5958}
5959
5960define <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) {
5961; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat:
5962; CHECK:       # %bb.0:
5963; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5964; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5965; CHECK-NEXT:    ret
5966  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5967  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5968  %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)
5969  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5970  ret <vscale x 1 x double> %v
5971}
5972
5973define <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) {
5974; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_commute:
5975; CHECK:       # %bb.0:
5976; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5977; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5978; CHECK-NEXT:    ret
5979  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5980  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5981  %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)
5982  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5983  ret <vscale x 1 x double> %v
5984}
5985
5986define <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) {
5987; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked:
5988; CHECK:       # %bb.0:
5989; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5990; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
5991; CHECK-NEXT:    ret
5992  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5993  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5994  %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)
5995  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
5996  ret <vscale x 1 x double> %v
5997}
5998
5999define <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) {
6000; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked_commute:
6001; CHECK:       # %bb.0:
6002; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6003; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
6004; CHECK-NEXT:    ret
6005  %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6006  %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6007  %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)
6008  %v = call <vscale x 1 x double> @llvm.vp.fmuladd.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)
6009  ret <vscale x 1 x double> %v
6010}
6011
6012declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
6013
6014define <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) {
6015; CHECK-LABEL: vfmsub_vv_nxv2f64:
6016; CHECK:       # %bb.0:
6017; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6018; CHECK-NEXT:    vfmsub.vv v10, v8, v12, v0.t
6019; CHECK-NEXT:    vmv.v.v v8, v10
6020; CHECK-NEXT:    ret
6021  %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)
6022  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6023  ret <vscale x 2 x double> %v
6024}
6025
6026define <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) {
6027; CHECK-LABEL: vfmsub_vv_nxv2f64_unmasked:
6028; CHECK:       # %bb.0:
6029; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6030; CHECK-NEXT:    vfmsub.vv v8, v10, v12
6031; CHECK-NEXT:    ret
6032  %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)
6033  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6034  ret <vscale x 2 x double> %v
6035}
6036
6037define <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) {
6038; CHECK-LABEL: vfmsub_vf_nxv2f64:
6039; CHECK:       # %bb.0:
6040; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6041; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
6042; CHECK-NEXT:    ret
6043  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6044  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6045  %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)
6046  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6047  ret <vscale x 2 x double> %v
6048}
6049
6050define <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) {
6051; CHECK-LABEL: vfmsub_vf_nxv2f64_commute:
6052; CHECK:       # %bb.0:
6053; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6054; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
6055; CHECK-NEXT:    ret
6056  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6057  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6058  %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)
6059  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6060  ret <vscale x 2 x double> %v
6061}
6062
6063define <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) {
6064; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked:
6065; CHECK:       # %bb.0:
6066; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6067; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
6068; CHECK-NEXT:    ret
6069  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6070  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6071  %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)
6072  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6073  ret <vscale x 2 x double> %v
6074}
6075
6076define <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) {
6077; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked_commute:
6078; CHECK:       # %bb.0:
6079; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6080; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
6081; CHECK-NEXT:    ret
6082  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6083  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6084  %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)
6085  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6086  ret <vscale x 2 x double> %v
6087}
6088
6089define <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) {
6090; CHECK-LABEL: vfnmadd_vv_nxv2f64:
6091; CHECK:       # %bb.0:
6092; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6093; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
6094; CHECK-NEXT:    vmv.v.v v8, v10
6095; CHECK-NEXT:    ret
6096  %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)
6097  %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)
6098  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6099  ret <vscale x 2 x double> %v
6100}
6101
6102define <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) {
6103; CHECK-LABEL: vfnmadd_vv_nxv2f64_commuted:
6104; CHECK:       # %bb.0:
6105; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6106; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
6107; CHECK-NEXT:    ret
6108  %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)
6109  %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)
6110  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6111  ret <vscale x 2 x double> %v
6112}
6113
6114define <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) {
6115; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked:
6116; CHECK:       # %bb.0:
6117; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6118; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6119; CHECK-NEXT:    ret
6120  %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)
6121  %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)
6122  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6123  ret <vscale x 2 x double> %v
6124}
6125
6126define <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) {
6127; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked_commuted:
6128; CHECK:       # %bb.0:
6129; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6130; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6131; CHECK-NEXT:    ret
6132  %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)
6133  %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)
6134  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6135  ret <vscale x 2 x double> %v
6136}
6137
6138define <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) {
6139; CHECK-LABEL: vfnmadd_vf_nxv2f64:
6140; CHECK:       # %bb.0:
6141; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6142; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6143; CHECK-NEXT:    ret
6144  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6145  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6146  %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)
6147  %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)
6148  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6149  ret <vscale x 2 x double> %v
6150}
6151
6152define <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) {
6153; CHECK-LABEL: vfnmadd_vf_nxv2f64_commute:
6154; CHECK:       # %bb.0:
6155; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6156; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6157; CHECK-NEXT:    ret
6158  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6159  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6160  %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)
6161  %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)
6162  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6163  ret <vscale x 2 x double> %v
6164}
6165
6166define <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) {
6167; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked:
6168; CHECK:       # %bb.0:
6169; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6170; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6171; CHECK-NEXT:    ret
6172  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6173  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6174  %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)
6175  %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)
6176  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6177  ret <vscale x 2 x double> %v
6178}
6179
6180define <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) {
6181; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked_commute:
6182; CHECK:       # %bb.0:
6183; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6184; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6185; CHECK-NEXT:    ret
6186  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6187  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6188  %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)
6189  %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)
6190  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6191  ret <vscale x 2 x double> %v
6192}
6193
6194define <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) {
6195; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat:
6196; CHECK:       # %bb.0:
6197; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6198; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6199; CHECK-NEXT:    ret
6200  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6201  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6202  %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)
6203  %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)
6204  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6205  ret <vscale x 2 x double> %v
6206}
6207
6208define <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) {
6209; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_commute:
6210; CHECK:       # %bb.0:
6211; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6212; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6213; CHECK-NEXT:    ret
6214  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6215  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6216  %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)
6217  %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)
6218  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6219  ret <vscale x 2 x double> %v
6220}
6221
6222define <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) {
6223; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked:
6224; CHECK:       # %bb.0:
6225; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6226; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6227; CHECK-NEXT:    ret
6228  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6229  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6230  %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)
6231  %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)
6232  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6233  ret <vscale x 2 x double> %v
6234}
6235
6236define <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) {
6237; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked_commute:
6238; CHECK:       # %bb.0:
6239; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6240; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6241; CHECK-NEXT:    ret
6242  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6243  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6244  %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)
6245  %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)
6246  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6247  ret <vscale x 2 x double> %v
6248}
6249
6250define <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) {
6251; CHECK-LABEL: vfnmsub_vv_nxv2f64:
6252; CHECK:       # %bb.0:
6253; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6254; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
6255; CHECK-NEXT:    vmv.v.v v8, v10
6256; CHECK-NEXT:    ret
6257  %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)
6258  %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)
6259  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6260  ret <vscale x 2 x double> %v
6261}
6262
6263define <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) {
6264; CHECK-LABEL: vfnmsub_vv_nxv2f64_commuted:
6265; CHECK:       # %bb.0:
6266; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6267; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
6268; CHECK-NEXT:    ret
6269  %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)
6270  %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)
6271  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6272  ret <vscale x 2 x double> %v
6273}
6274
6275define <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) {
6276; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked:
6277; CHECK:       # %bb.0:
6278; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6279; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6280; CHECK-NEXT:    ret
6281  %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)
6282  %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)
6283  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6284  ret <vscale x 2 x double> %v
6285}
6286
6287define <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) {
6288; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked_commuted:
6289; CHECK:       # %bb.0:
6290; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6291; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6292; CHECK-NEXT:    ret
6293  %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)
6294  %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)
6295  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6296  ret <vscale x 2 x double> %v
6297}
6298
6299define <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) {
6300; CHECK-LABEL: vfnmsub_vf_nxv2f64:
6301; CHECK:       # %bb.0:
6302; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6303; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6304; CHECK-NEXT:    ret
6305  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6306  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6307  %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)
6308  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6309  ret <vscale x 2 x double> %v
6310}
6311
6312define <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) {
6313; CHECK-LABEL: vfnmsub_vf_nxv2f64_commute:
6314; CHECK:       # %bb.0:
6315; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6316; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6317; CHECK-NEXT:    ret
6318  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6319  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6320  %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)
6321  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6322  ret <vscale x 2 x double> %v
6323}
6324
6325define <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) {
6326; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked:
6327; CHECK:       # %bb.0:
6328; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6329; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
6330; CHECK-NEXT:    ret
6331  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6332  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6333  %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)
6334  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6335  ret <vscale x 2 x double> %v
6336}
6337
6338define <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) {
6339; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked_commute:
6340; CHECK:       # %bb.0:
6341; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6342; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
6343; CHECK-NEXT:    ret
6344  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6345  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6346  %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)
6347  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6348  ret <vscale x 2 x double> %v
6349}
6350
6351define <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) {
6352; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat:
6353; CHECK:       # %bb.0:
6354; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6355; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6356; CHECK-NEXT:    ret
6357  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6358  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6359  %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)
6360  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6361  ret <vscale x 2 x double> %v
6362}
6363
6364define <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) {
6365; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_commute:
6366; CHECK:       # %bb.0:
6367; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6368; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6369; CHECK-NEXT:    ret
6370  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6371  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6372  %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)
6373  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6374  ret <vscale x 2 x double> %v
6375}
6376
6377define <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) {
6378; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked:
6379; CHECK:       # %bb.0:
6380; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6381; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
6382; CHECK-NEXT:    ret
6383  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6384  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6385  %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)
6386  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6387  ret <vscale x 2 x double> %v
6388}
6389
6390define <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) {
6391; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked_commute:
6392; CHECK:       # %bb.0:
6393; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6394; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
6395; CHECK-NEXT:    ret
6396  %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6397  %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6398  %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)
6399  %v = call <vscale x 2 x double> @llvm.vp.fmuladd.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)
6400  ret <vscale x 2 x double> %v
6401}
6402
6403declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
6404
6405define <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) {
6406; CHECK-LABEL: vfmsub_vv_nxv4f64:
6407; CHECK:       # %bb.0:
6408; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6409; CHECK-NEXT:    vfmsub.vv v12, v8, v16, v0.t
6410; CHECK-NEXT:    vmv.v.v v8, v12
6411; CHECK-NEXT:    ret
6412  %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)
6413  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6414  ret <vscale x 4 x double> %v
6415}
6416
6417define <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) {
6418; CHECK-LABEL: vfmsub_vv_nxv4f64_unmasked:
6419; CHECK:       # %bb.0:
6420; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6421; CHECK-NEXT:    vfmsub.vv v8, v12, v16
6422; CHECK-NEXT:    ret
6423  %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)
6424  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6425  ret <vscale x 4 x double> %v
6426}
6427
6428define <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) {
6429; CHECK-LABEL: vfmsub_vf_nxv4f64:
6430; CHECK:       # %bb.0:
6431; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6432; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
6433; CHECK-NEXT:    ret
6434  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6435  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6436  %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)
6437  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6438  ret <vscale x 4 x double> %v
6439}
6440
6441define <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) {
6442; CHECK-LABEL: vfmsub_vf_nxv4f64_commute:
6443; CHECK:       # %bb.0:
6444; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6445; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
6446; CHECK-NEXT:    ret
6447  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6448  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6449  %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)
6450  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6451  ret <vscale x 4 x double> %v
6452}
6453
6454define <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) {
6455; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked:
6456; CHECK:       # %bb.0:
6457; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6458; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
6459; CHECK-NEXT:    ret
6460  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6461  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6462  %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)
6463  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6464  ret <vscale x 4 x double> %v
6465}
6466
6467define <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) {
6468; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked_commute:
6469; CHECK:       # %bb.0:
6470; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6471; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
6472; CHECK-NEXT:    ret
6473  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6474  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6475  %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)
6476  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6477  ret <vscale x 4 x double> %v
6478}
6479
6480define <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) {
6481; CHECK-LABEL: vfnmadd_vv_nxv4f64:
6482; CHECK:       # %bb.0:
6483; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6484; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
6485; CHECK-NEXT:    vmv.v.v v8, v12
6486; CHECK-NEXT:    ret
6487  %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)
6488  %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)
6489  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6490  ret <vscale x 4 x double> %v
6491}
6492
6493define <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) {
6494; CHECK-LABEL: vfnmadd_vv_nxv4f64_commuted:
6495; CHECK:       # %bb.0:
6496; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6497; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
6498; CHECK-NEXT:    ret
6499  %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)
6500  %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)
6501  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6502  ret <vscale x 4 x double> %v
6503}
6504
6505define <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) {
6506; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked:
6507; CHECK:       # %bb.0:
6508; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6509; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6510; CHECK-NEXT:    ret
6511  %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)
6512  %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)
6513  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6514  ret <vscale x 4 x double> %v
6515}
6516
6517define <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) {
6518; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked_commuted:
6519; CHECK:       # %bb.0:
6520; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6521; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6522; CHECK-NEXT:    ret
6523  %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)
6524  %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)
6525  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6526  ret <vscale x 4 x double> %v
6527}
6528
6529define <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) {
6530; CHECK-LABEL: vfnmadd_vf_nxv4f64:
6531; CHECK:       # %bb.0:
6532; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6533; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
6534; CHECK-NEXT:    ret
6535  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6536  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6537  %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)
6538  %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)
6539  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6540  ret <vscale x 4 x double> %v
6541}
6542
6543define <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) {
6544; CHECK-LABEL: vfnmadd_vf_nxv4f64_commute:
6545; CHECK:       # %bb.0:
6546; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6547; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
6548; CHECK-NEXT:    ret
6549  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6550  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6551  %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)
6552  %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)
6553  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6554  ret <vscale x 4 x double> %v
6555}
6556
6557define <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) {
6558; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked:
6559; CHECK:       # %bb.0:
6560; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6561; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
6562; CHECK-NEXT:    ret
6563  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6564  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6565  %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)
6566  %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)
6567  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6568  ret <vscale x 4 x double> %v
6569}
6570
6571define <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) {
6572; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked_commute:
6573; CHECK:       # %bb.0:
6574; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6575; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
6576; CHECK-NEXT:    ret
6577  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6578  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6579  %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)
6580  %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)
6581  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6582  ret <vscale x 4 x double> %v
6583}
6584
6585define <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) {
6586; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat:
6587; CHECK:       # %bb.0:
6588; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6589; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
6590; CHECK-NEXT:    ret
6591  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6592  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6593  %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)
6594  %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)
6595  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6596  ret <vscale x 4 x double> %v
6597}
6598
6599define <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) {
6600; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_commute:
6601; CHECK:       # %bb.0:
6602; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6603; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
6604; CHECK-NEXT:    ret
6605  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6606  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6607  %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)
6608  %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)
6609  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6610  ret <vscale x 4 x double> %v
6611}
6612
6613define <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) {
6614; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked:
6615; CHECK:       # %bb.0:
6616; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6617; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
6618; CHECK-NEXT:    ret
6619  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6620  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6621  %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)
6622  %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)
6623  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6624  ret <vscale x 4 x double> %v
6625}
6626
6627define <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) {
6628; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked_commute:
6629; CHECK:       # %bb.0:
6630; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6631; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
6632; CHECK-NEXT:    ret
6633  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6634  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6635  %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)
6636  %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)
6637  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6638  ret <vscale x 4 x double> %v
6639}
6640
6641define <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) {
6642; CHECK-LABEL: vfnmsub_vv_nxv4f64:
6643; CHECK:       # %bb.0:
6644; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6645; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
6646; CHECK-NEXT:    vmv.v.v v8, v12
6647; CHECK-NEXT:    ret
6648  %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)
6649  %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)
6650  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6651  ret <vscale x 4 x double> %v
6652}
6653
6654define <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) {
6655; CHECK-LABEL: vfnmsub_vv_nxv4f64_commuted:
6656; CHECK:       # %bb.0:
6657; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6658; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
6659; CHECK-NEXT:    ret
6660  %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)
6661  %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)
6662  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6663  ret <vscale x 4 x double> %v
6664}
6665
6666define <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) {
6667; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked:
6668; CHECK:       # %bb.0:
6669; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6670; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6671; CHECK-NEXT:    ret
6672  %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)
6673  %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)
6674  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6675  ret <vscale x 4 x double> %v
6676}
6677
6678define <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) {
6679; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked_commuted:
6680; CHECK:       # %bb.0:
6681; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6682; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6683; CHECK-NEXT:    ret
6684  %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)
6685  %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)
6686  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6687  ret <vscale x 4 x double> %v
6688}
6689
6690define <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) {
6691; CHECK-LABEL: vfnmsub_vf_nxv4f64:
6692; CHECK:       # %bb.0:
6693; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6694; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
6695; CHECK-NEXT:    ret
6696  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6697  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6698  %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)
6699  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6700  ret <vscale x 4 x double> %v
6701}
6702
6703define <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) {
6704; CHECK-LABEL: vfnmsub_vf_nxv4f64_commute:
6705; CHECK:       # %bb.0:
6706; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6707; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
6708; CHECK-NEXT:    ret
6709  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6710  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6711  %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)
6712  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6713  ret <vscale x 4 x double> %v
6714}
6715
6716define <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) {
6717; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked:
6718; CHECK:       # %bb.0:
6719; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6720; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
6721; CHECK-NEXT:    ret
6722  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6723  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6724  %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)
6725  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6726  ret <vscale x 4 x double> %v
6727}
6728
6729define <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) {
6730; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked_commute:
6731; CHECK:       # %bb.0:
6732; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6733; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
6734; CHECK-NEXT:    ret
6735  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6736  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6737  %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)
6738  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6739  ret <vscale x 4 x double> %v
6740}
6741
6742define <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) {
6743; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat:
6744; CHECK:       # %bb.0:
6745; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6746; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
6747; CHECK-NEXT:    ret
6748  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6749  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6750  %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)
6751  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6752  ret <vscale x 4 x double> %v
6753}
6754
6755define <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) {
6756; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_commute:
6757; CHECK:       # %bb.0:
6758; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6759; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
6760; CHECK-NEXT:    ret
6761  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6762  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6763  %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)
6764  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6765  ret <vscale x 4 x double> %v
6766}
6767
6768define <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) {
6769; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked:
6770; CHECK:       # %bb.0:
6771; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6772; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
6773; CHECK-NEXT:    ret
6774  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6775  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6776  %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)
6777  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6778  ret <vscale x 4 x double> %v
6779}
6780
6781define <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) {
6782; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked_commute:
6783; CHECK:       # %bb.0:
6784; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6785; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
6786; CHECK-NEXT:    ret
6787  %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6788  %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6789  %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)
6790  %v = call <vscale x 4 x double> @llvm.vp.fmuladd.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)
6791  ret <vscale x 4 x double> %v
6792}
6793
6794declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
6795
6796define <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) {
6797; CHECK-LABEL: vfmsub_vv_nxv8f64:
6798; CHECK:       # %bb.0:
6799; CHECK-NEXT:    vl8re64.v v24, (a0)
6800; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6801; CHECK-NEXT:    vfmsub.vv v16, v8, v24, v0.t
6802; CHECK-NEXT:    vmv.v.v v8, v16
6803; CHECK-NEXT:    ret
6804  %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)
6805  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6806  ret <vscale x 8 x double> %v
6807}
6808
6809define <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) {
6810; CHECK-LABEL: vfmsub_vv_nxv8f64_unmasked:
6811; CHECK:       # %bb.0:
6812; CHECK-NEXT:    vl8re64.v v24, (a0)
6813; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6814; CHECK-NEXT:    vfmsub.vv v8, v16, v24
6815; CHECK-NEXT:    ret
6816  %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)
6817  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6818  ret <vscale x 8 x double> %v
6819}
6820
6821define <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) {
6822; CHECK-LABEL: vfmsub_vf_nxv8f64:
6823; CHECK:       # %bb.0:
6824; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6825; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
6826; CHECK-NEXT:    ret
6827  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6828  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6829  %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)
6830  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6831  ret <vscale x 8 x double> %v
6832}
6833
6834define <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) {
6835; CHECK-LABEL: vfmsub_vf_nxv8f64_commute:
6836; CHECK:       # %bb.0:
6837; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6838; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
6839; CHECK-NEXT:    ret
6840  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6841  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6842  %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)
6843  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6844  ret <vscale x 8 x double> %v
6845}
6846
6847define <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) {
6848; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked:
6849; CHECK:       # %bb.0:
6850; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6851; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
6852; CHECK-NEXT:    ret
6853  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6854  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6855  %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)
6856  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6857  ret <vscale x 8 x double> %v
6858}
6859
6860define <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) {
6861; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked_commute:
6862; CHECK:       # %bb.0:
6863; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6864; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
6865; CHECK-NEXT:    ret
6866  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6867  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6868  %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)
6869  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6870  ret <vscale x 8 x double> %v
6871}
6872
6873define <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) {
6874; CHECK-LABEL: vfnmadd_vv_nxv8f64:
6875; CHECK:       # %bb.0:
6876; CHECK-NEXT:    vl8re64.v v24, (a0)
6877; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6878; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
6879; CHECK-NEXT:    vmv.v.v v8, v16
6880; CHECK-NEXT:    ret
6881  %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)
6882  %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)
6883  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6884  ret <vscale x 8 x double> %v
6885}
6886
6887define <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) {
6888; CHECK-LABEL: vfnmadd_vv_nxv8f64_commuted:
6889; CHECK:       # %bb.0:
6890; CHECK-NEXT:    vl8re64.v v24, (a0)
6891; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6892; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
6893; CHECK-NEXT:    ret
6894  %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)
6895  %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)
6896  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6897  ret <vscale x 8 x double> %v
6898}
6899
6900define <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) {
6901; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked:
6902; CHECK:       # %bb.0:
6903; CHECK-NEXT:    vl8re64.v v24, (a0)
6904; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6905; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
6906; CHECK-NEXT:    ret
6907  %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)
6908  %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)
6909  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6910  ret <vscale x 8 x double> %v
6911}
6912
6913define <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) {
6914; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked_commuted:
6915; CHECK:       # %bb.0:
6916; CHECK-NEXT:    vl8re64.v v24, (a0)
6917; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6918; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
6919; CHECK-NEXT:    ret
6920  %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)
6921  %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)
6922  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6923  ret <vscale x 8 x double> %v
6924}
6925
6926define <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) {
6927; CHECK-LABEL: vfnmadd_vf_nxv8f64:
6928; CHECK:       # %bb.0:
6929; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6930; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
6931; CHECK-NEXT:    ret
6932  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6933  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6934  %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)
6935  %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)
6936  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6937  ret <vscale x 8 x double> %v
6938}
6939
6940define <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) {
6941; CHECK-LABEL: vfnmadd_vf_nxv8f64_commute:
6942; CHECK:       # %bb.0:
6943; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6944; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
6945; CHECK-NEXT:    ret
6946  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6947  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6948  %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)
6949  %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)
6950  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6951  ret <vscale x 8 x double> %v
6952}
6953
6954define <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) {
6955; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked:
6956; CHECK:       # %bb.0:
6957; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6958; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
6959; CHECK-NEXT:    ret
6960  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6961  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6962  %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)
6963  %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)
6964  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6965  ret <vscale x 8 x double> %v
6966}
6967
6968define <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) {
6969; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked_commute:
6970; CHECK:       # %bb.0:
6971; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6972; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
6973; CHECK-NEXT:    ret
6974  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6975  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6976  %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)
6977  %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)
6978  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6979  ret <vscale x 8 x double> %v
6980}
6981
6982define <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) {
6983; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat:
6984; CHECK:       # %bb.0:
6985; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6986; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
6987; CHECK-NEXT:    ret
6988  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6989  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6990  %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)
6991  %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)
6992  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
6993  ret <vscale x 8 x double> %v
6994}
6995
6996define <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) {
6997; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_commute:
6998; CHECK:       # %bb.0:
6999; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7000; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
7001; CHECK-NEXT:    ret
7002  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7003  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7004  %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)
7005  %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)
7006  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7007  ret <vscale x 8 x double> %v
7008}
7009
7010define <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) {
7011; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked:
7012; CHECK:       # %bb.0:
7013; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7014; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
7015; CHECK-NEXT:    ret
7016  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7017  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7018  %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)
7019  %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)
7020  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7021  ret <vscale x 8 x double> %v
7022}
7023
7024define <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) {
7025; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked_commute:
7026; CHECK:       # %bb.0:
7027; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7028; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
7029; CHECK-NEXT:    ret
7030  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7031  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7032  %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)
7033  %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)
7034  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7035  ret <vscale x 8 x double> %v
7036}
7037
7038define <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) {
7039; CHECK-LABEL: vfnmsub_vv_nxv8f64:
7040; CHECK:       # %bb.0:
7041; CHECK-NEXT:    vl8re64.v v24, (a0)
7042; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
7043; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
7044; CHECK-NEXT:    vmv.v.v v8, v16
7045; CHECK-NEXT:    ret
7046  %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)
7047  %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)
7048  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7049  ret <vscale x 8 x double> %v
7050}
7051
7052define <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) {
7053; CHECK-LABEL: vfnmsub_vv_nxv8f64_commuted:
7054; CHECK:       # %bb.0:
7055; CHECK-NEXT:    vl8re64.v v24, (a0)
7056; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
7057; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
7058; CHECK-NEXT:    ret
7059  %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)
7060  %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)
7061  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7062  ret <vscale x 8 x double> %v
7063}
7064
7065define <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) {
7066; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked:
7067; CHECK:       # %bb.0:
7068; CHECK-NEXT:    vl8re64.v v24, (a0)
7069; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
7070; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
7071; CHECK-NEXT:    ret
7072  %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)
7073  %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)
7074  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7075  ret <vscale x 8 x double> %v
7076}
7077
7078define <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) {
7079; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked_commuted:
7080; CHECK:       # %bb.0:
7081; CHECK-NEXT:    vl8re64.v v24, (a0)
7082; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
7083; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
7084; CHECK-NEXT:    ret
7085  %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)
7086  %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)
7087  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7088  ret <vscale x 8 x double> %v
7089}
7090
7091define <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) {
7092; CHECK-LABEL: vfnmsub_vf_nxv8f64:
7093; CHECK:       # %bb.0:
7094; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7095; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7096; CHECK-NEXT:    ret
7097  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7098  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7099  %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)
7100  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7101  ret <vscale x 8 x double> %v
7102}
7103
7104define <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) {
7105; CHECK-LABEL: vfnmsub_vf_nxv8f64_commute:
7106; CHECK:       # %bb.0:
7107; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7108; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7109; CHECK-NEXT:    ret
7110  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7111  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7112  %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)
7113  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7114  ret <vscale x 8 x double> %v
7115}
7116
7117define <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) {
7118; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked:
7119; CHECK:       # %bb.0:
7120; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7121; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
7122; CHECK-NEXT:    ret
7123  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7124  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7125  %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)
7126  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7127  ret <vscale x 8 x double> %v
7128}
7129
7130define <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) {
7131; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked_commute:
7132; CHECK:       # %bb.0:
7133; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7134; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
7135; CHECK-NEXT:    ret
7136  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7137  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7138  %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)
7139  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7140  ret <vscale x 8 x double> %v
7141}
7142
7143define <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) {
7144; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat:
7145; CHECK:       # %bb.0:
7146; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7147; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7148; CHECK-NEXT:    ret
7149  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7150  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7151  %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)
7152  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7153  ret <vscale x 8 x double> %v
7154}
7155
7156define <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) {
7157; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_commute:
7158; CHECK:       # %bb.0:
7159; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7160; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7161; CHECK-NEXT:    ret
7162  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7163  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7164  %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)
7165  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7166  ret <vscale x 8 x double> %v
7167}
7168
7169define <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) {
7170; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked:
7171; CHECK:       # %bb.0:
7172; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7173; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
7174; CHECK-NEXT:    ret
7175  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7176  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7177  %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)
7178  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7179  ret <vscale x 8 x double> %v
7180}
7181
7182define <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) {
7183; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked_commute:
7184; CHECK:       # %bb.0:
7185; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7186; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
7187; CHECK-NEXT:    ret
7188  %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7189  %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7190  %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)
7191  %v = call <vscale x 8 x double> @llvm.vp.fmuladd.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)
7192  ret <vscale x 8 x double> %v
7193}
7194