[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfmuladd-vp.ll
blob901f3cd63fa9e5f0d61aa23fbb0e624b6e0a477b
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
7 declare <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)
9 define <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
20 define <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
30 define <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
42 define <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
54 define <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
66 define <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
78 declare <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)
80 define <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
91 define <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
101 define <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
113 define <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
125 define <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
137 define <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
149 declare <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)
151 define <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
162 define <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
172 define <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
184 define <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
196 define <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
208 define <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
220 declare <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)
222 define <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
233 define <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
243 define <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
255 define <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
267 define <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
279 define <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
291 declare <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)
293 define <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
304 define <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
314 define <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
326 define <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
338 define <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
350 define <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
362 declare <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)
364 define <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
376 define <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
387 define <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
399 define <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
411 define <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
423 define <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
435 declare <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)
437 define <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
448 define <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
458 define <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
470 define <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
482 define <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
494 define <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
506 declare <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)
508 define <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
519 define <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
529 define <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
541 define <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
553 define <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
565 define <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
577 declare <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)
579 define <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
590 define <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
600 define <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
612 define <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
624 define <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
636 define <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
648 declare <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)
650 define <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
661 define <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
671 define <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
683 define <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
695 define <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
707 define <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
719 declare <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)
721 define <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
733 define <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
744 define <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
756 define <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
768 define <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
780 define <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
792 declare <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)
794 define <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
805 define <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
815 define <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
827 define <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
839 define <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
851 define <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
863 declare <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)
865 define <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
876 define <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
886 define <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
898 define <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
910 define <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
922 define <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
934 declare <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)
936 define <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
947 define <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
957 define <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
969 define <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
981 define <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
993 define <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
1005 declare <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)
1007 define <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
1019 define <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
1030 declare <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)
1032 define <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
1044 define <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
1055 define <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
1067 define <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
1079 define <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
1091 define <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
1103 declare <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)
1105 define <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
1222 define <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
1300 declare <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
1302 define <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
1314 define <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
1325 define <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
1338 define <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
1351 define <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
1364 define <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
1377 define <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
1390 define <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
1402 define <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
1414 define <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
1426 define <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
1440 define <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
1454 define <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
1468 define <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
1482 define <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
1496 define <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
1510 define <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
1524 define <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
1538 define <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
1551 define <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
1563 define <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
1575 define <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
1587 define <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
1600 define <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
1613 define <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
1626 define <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
1639 define <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
1652 define <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
1665 define <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
1678 define <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
1691 declare <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
1693 define <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
1705 define <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
1716 define <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
1729 define <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
1742 define <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
1755 define <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
1768 define <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
1781 define <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
1793 define <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
1805 define <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
1817 define <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
1831 define <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
1845 define <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
1859 define <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
1873 define <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
1887 define <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
1901 define <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
1915 define <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
1929 define <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
1942 define <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
1954 define <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
1966 define <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
1978 define <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
1991 define <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
2004 define <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
2017 define <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
2030 define <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
2043 define <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
2056 define <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
2069 define <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
2082 declare <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
2084 define <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
2096 define <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
2107 define <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
2120 define <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
2133 define <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
2146 define <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
2159 define <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
2172 define <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
2184 define <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
2196 define <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
2208 define <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
2222 define <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
2236 define <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
2250 define <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
2264 define <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
2278 define <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
2292 define <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
2306 define <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
2320 define <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
2333 define <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
2345 define <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
2357 define <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
2369 define <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
2382 define <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
2395 define <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
2408 define <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
2421 define <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
2434 define <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
2447 define <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
2460 define <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
2473 declare <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
2475 define <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
2487 define <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
2498 define <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
2511 define <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
2524 define <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
2537 define <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
2550 define <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
2563 define <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
2575 define <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
2587 define <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
2599 define <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
2613 define <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
2627 define <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
2641 define <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
2655 define <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
2669 define <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
2683 define <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
2697 define <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
2711 define <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
2724 define <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
2736 define <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
2748 define <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
2760 define <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
2773 define <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
2786 define <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
2799 define <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
2812 define <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
2825 define <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
2838 define <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
2851 define <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
2864 declare <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
2866 define <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
2878 define <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
2889 define <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
2902 define <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
2915 define <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
2928 define <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
2941 define <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
2954 define <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
2966 define <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
2978 define <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
2990 define <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
3004 define <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
3018 define <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
3032 define <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
3046 define <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
3060 define <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
3074 define <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
3088 define <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
3102 define <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
3115 define <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
3127 define <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
3139 define <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
3151 define <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
3164 define <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
3177 define <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
3190 define <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
3203 define <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
3216 define <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
3229 define <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
3242 define <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
3255 declare <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
3257 define <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
3270 define <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
3282 define <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
3295 define <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
3308 define <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
3321 define <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
3334 define <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
3348 define <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
3361 define <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
3374 define <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
3387 define <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
3401 define <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
3415 define <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
3429 define <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
3443 define <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
3457 define <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
3471 define <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
3485 define <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
3499 define <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
3513 define <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
3526 define <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
3539 define <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
3552 define <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
3565 define <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
3578 define <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
3591 define <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
3604 define <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
3617 define <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
3630 define <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
3643 define <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
3656 declare <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
3658 define <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
3670 define <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
3681 define <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
3694 define <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
3707 define <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
3720 define <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
3733 define <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
3746 define <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
3758 define <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
3770 define <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
3782 define <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
3796 define <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
3810 define <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
3824 define <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
3838 define <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
3852 define <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
3866 define <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
3880 define <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
3894 define <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
3907 define <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
3919 define <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
3931 define <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
3943 define <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
3956 define <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
3969 define <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
3982 define <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
3995 define <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
4008 define <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
4021 define <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
4034 define <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
4047 declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
4049 define <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
4061 define <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
4072 define <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
4085 define <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
4098 define <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
4111 define <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
4124 define <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
4137 define <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
4149 define <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
4161 define <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
4173 define <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
4187 define <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
4201 define <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
4215 define <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
4229 define <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
4243 define <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
4257 define <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
4271 define <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
4285 define <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
4298 define <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
4310 define <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
4322 define <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
4334 define <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
4347 define <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
4360 define <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
4373 define <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
4386 define <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
4399 define <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
4412 define <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
4425 define <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
4438 declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
4440 define <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
4452 define <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
4463 define <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
4476 define <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
4489 define <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
4502 define <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
4515 define <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
4528 define <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
4540 define <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
4552 define <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
4564 define <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
4578 define <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
4592 define <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
4606 define <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
4620 define <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
4634 define <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
4648 define <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
4662 define <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
4676 define <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
4689 define <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
4701 define <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
4713 define <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
4725 define <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
4738 define <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
4751 define <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
4764 define <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
4777 define <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
4790 define <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
4803 define <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
4816 define <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
4829 declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
4831 define <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
4843 define <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
4854 define <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
4867 define <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
4880 define <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
4893 define <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
4906 define <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
4919 define <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
4931 define <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
4943 define <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
4955 define <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
4969 define <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
4983 define <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
4997 define <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
5011 define <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
5025 define <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
5039 define <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
5053 define <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
5067 define <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
5080 define <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
5092 define <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
5104 define <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
5116 define <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
5129 define <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
5142 define <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
5155 define <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
5168 define <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
5181 define <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
5194 define <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
5207 define <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
5220 declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
5222 define <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
5235 define <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
5247 define <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
5260 define <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
5273 define <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
5286 define <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
5299 define <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
5313 define <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
5326 define <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
5339 define <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
5352 define <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
5366 define <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
5380 define <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
5394 define <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
5408 define <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
5422 define <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
5436 define <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
5450 define <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
5464 define <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
5478 define <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
5491 define <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
5504 define <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
5517 define <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
5530 define <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
5543 define <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
5556 define <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
5569 define <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
5582 define <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
5595 define <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
5608 define <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
5621 declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
5623 define <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
5635 define <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
5646 define <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
5659 define <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
5672 define <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
5685 define <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
5698 define <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
5711 define <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
5723 define <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
5735 define <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
5747 define <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
5761 define <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
5775 define <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
5789 define <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
5803 define <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
5817 define <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
5831 define <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
5845 define <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
5859 define <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
5872 define <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
5884 define <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
5896 define <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
5908 define <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
5921 define <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
5934 define <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
5947 define <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
5960 define <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
5973 define <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
5986 define <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
5999 define <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
6012 declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
6014 define <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
6026 define <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
6037 define <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
6050 define <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
6063 define <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
6076 define <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
6089 define <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
6102 define <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
6114 define <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
6126 define <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
6138 define <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
6152 define <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
6166 define <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
6180 define <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
6194 define <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
6208 define <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
6222 define <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
6236 define <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
6250 define <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
6263 define <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
6275 define <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
6287 define <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
6299 define <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
6312 define <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
6325 define <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
6338 define <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
6351 define <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
6364 define <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
6377 define <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
6390 define <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
6403 declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
6405 define <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
6417 define <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
6428 define <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
6441 define <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
6454 define <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
6467 define <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
6480 define <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
6493 define <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
6505 define <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
6517 define <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
6529 define <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
6543 define <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
6557 define <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
6571 define <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
6585 define <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
6599 define <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
6613 define <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
6627 define <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
6641 define <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
6654 define <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
6666 define <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
6678 define <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
6690 define <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
6703 define <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
6716 define <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
6729 define <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
6742 define <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
6755 define <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
6768 define <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
6781 define <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
6794 declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
6796 define <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
6809 define <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
6821 define <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
6834 define <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
6847 define <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
6860 define <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
6873 define <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
6887 define <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
6900 define <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
6913 define <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
6926 define <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
6940 define <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
6954 define <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
6968 define <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
6982 define <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
6996 define <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
7010 define <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
7024 define <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
7038 define <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
7052 define <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
7065 define <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
7078 define <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
7091 define <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
7104 define <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
7117 define <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
7130 define <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
7143 define <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
7156 define <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
7169 define <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
7182 define <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