[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfmuladd-vp.ll
blobabda6750e5a8a5a864c440379014935458c632c5
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+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, 40
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, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
1115 ; CHECK-NEXT:    vmv1r.v v7, v0
1116 ; CHECK-NEXT:    csrr a1, vlenb
1117 ; CHECK-NEXT:    li a3, 24
1118 ; CHECK-NEXT:    mul a1, a1, a3
1119 ; CHECK-NEXT:    add a1, sp, a1
1120 ; CHECK-NEXT:    addi a1, a1, 16
1121 ; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
1122 ; CHECK-NEXT:    csrr a1, vlenb
1123 ; CHECK-NEXT:    slli a1, a1, 5
1124 ; CHECK-NEXT:    add a1, sp, a1
1125 ; CHECK-NEXT:    addi a1, a1, 16
1126 ; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
1127 ; CHECK-NEXT:    csrr a1, vlenb
1128 ; CHECK-NEXT:    srli a3, a1, 3
1129 ; CHECK-NEXT:    slli a5, a1, 3
1130 ; CHECK-NEXT:    add a6, a2, a5
1131 ; CHECK-NEXT:    vl8re64.v v8, (a6)
1132 ; CHECK-NEXT:    csrr a6, vlenb
1133 ; CHECK-NEXT:    slli a6, a6, 4
1134 ; CHECK-NEXT:    add a6, sp, a6
1135 ; CHECK-NEXT:    addi a6, a6, 16
1136 ; CHECK-NEXT:    vs8r.v v8, (a6) # Unknown-size Folded Spill
1137 ; CHECK-NEXT:    add a5, a0, a5
1138 ; CHECK-NEXT:    sub a6, a4, a1
1139 ; CHECK-NEXT:    sltu a7, a4, a6
1140 ; CHECK-NEXT:    addi a7, a7, -1
1141 ; CHECK-NEXT:    vl8re64.v v8, (a5)
1142 ; CHECK-NEXT:    vl8re64.v v16, (a2)
1143 ; CHECK-NEXT:    csrr a2, vlenb
1144 ; CHECK-NEXT:    slli a2, a2, 3
1145 ; CHECK-NEXT:    add a2, sp, a2
1146 ; CHECK-NEXT:    addi a2, a2, 16
1147 ; CHECK-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
1148 ; CHECK-NEXT:    vl8re64.v v16, (a0)
1149 ; CHECK-NEXT:    addi a0, sp, 16
1150 ; CHECK-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
1151 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
1152 ; CHECK-NEXT:    vslidedown.vx v0, v0, a3
1153 ; CHECK-NEXT:    and a0, a7, a6
1154 ; CHECK-NEXT:    csrr a2, vlenb
1155 ; CHECK-NEXT:    li a3, 24
1156 ; CHECK-NEXT:    mul a2, a2, a3
1157 ; CHECK-NEXT:    add a2, sp, a2
1158 ; CHECK-NEXT:    addi a2, a2, 16
1159 ; CHECK-NEXT:    vl8r.v v24, (a2) # Unknown-size Folded Reload
1160 ; CHECK-NEXT:    csrr a2, vlenb
1161 ; CHECK-NEXT:    slli a2, a2, 4
1162 ; CHECK-NEXT:    add a2, sp, a2
1163 ; CHECK-NEXT:    addi a2, a2, 16
1164 ; CHECK-NEXT:    vl8r.v v16, (a2) # Unknown-size Folded Reload
1165 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1166 ; CHECK-NEXT:    vfmadd.vv v8, v24, v16, v0.t
1167 ; CHECK-NEXT:    csrr a0, vlenb
1168 ; CHECK-NEXT:    li a2, 24
1169 ; CHECK-NEXT:    mul a0, a0, a2
1170 ; CHECK-NEXT:    add a0, sp, a0
1171 ; CHECK-NEXT:    addi a0, a0, 16
1172 ; CHECK-NEXT:    vs8r.v v8, (a0) # Unknown-size Folded Spill
1173 ; CHECK-NEXT:    bltu a4, a1, .LBB92_2
1174 ; CHECK-NEXT:  # %bb.1:
1175 ; CHECK-NEXT:    mv a4, a1
1176 ; CHECK-NEXT:  .LBB92_2:
1177 ; CHECK-NEXT:    vmv1r.v v0, v7
1178 ; CHECK-NEXT:    csrr a0, vlenb
1179 ; CHECK-NEXT:    slli a0, a0, 5
1180 ; CHECK-NEXT:    add a0, sp, a0
1181 ; CHECK-NEXT:    addi a0, a0, 16
1182 ; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1183 ; CHECK-NEXT:    csrr a0, vlenb
1184 ; CHECK-NEXT:    slli a0, a0, 3
1185 ; CHECK-NEXT:    add a0, sp, a0
1186 ; CHECK-NEXT:    addi a0, a0, 16
1187 ; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1188 ; CHECK-NEXT:    addi a0, sp, 16
1189 ; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1190 ; CHECK-NEXT:    vsetvli zero, a4, e64, m8, ta, ma
1191 ; CHECK-NEXT:    vfmadd.vv v16, v24, v8, v0.t
1192 ; CHECK-NEXT:    vmv.v.v v8, v16
1193 ; CHECK-NEXT:    csrr a0, vlenb
1194 ; CHECK-NEXT:    li a1, 24
1195 ; CHECK-NEXT:    mul a0, a0, a1
1196 ; CHECK-NEXT:    add a0, sp, a0
1197 ; CHECK-NEXT:    addi a0, a0, 16
1198 ; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1199 ; CHECK-NEXT:    csrr a0, vlenb
1200 ; CHECK-NEXT:    li a1, 40
1201 ; CHECK-NEXT:    mul a0, a0, a1
1202 ; CHECK-NEXT:    add sp, sp, a0
1203 ; CHECK-NEXT:    addi sp, sp, 16
1204 ; CHECK-NEXT:    ret
1205   %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)
1206   ret <vscale x 16 x double> %v
1209 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) {
1210 ; CHECK-LABEL: vfma_vv_nxv16f64_unmasked:
1211 ; CHECK:       # %bb.0:
1212 ; CHECK-NEXT:    addi sp, sp, -16
1213 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1214 ; CHECK-NEXT:    csrr a1, vlenb
1215 ; CHECK-NEXT:    li a3, 24
1216 ; CHECK-NEXT:    mul a1, a1, a3
1217 ; CHECK-NEXT:    sub sp, sp, a1
1218 ; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
1219 ; CHECK-NEXT:    csrr a1, vlenb
1220 ; CHECK-NEXT:    slli a1, a1, 3
1221 ; CHECK-NEXT:    add a1, sp, a1
1222 ; CHECK-NEXT:    addi a1, a1, 16
1223 ; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
1224 ; CHECK-NEXT:    csrr a1, vlenb
1225 ; CHECK-NEXT:    slli a1, a1, 4
1226 ; CHECK-NEXT:    add a1, sp, a1
1227 ; CHECK-NEXT:    addi a1, a1, 16
1228 ; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
1229 ; CHECK-NEXT:    csrr a1, vlenb
1230 ; CHECK-NEXT:    slli a3, a1, 3
1231 ; CHECK-NEXT:    add a5, a2, a3
1232 ; CHECK-NEXT:    vl8re64.v v24, (a5)
1233 ; CHECK-NEXT:    add a3, a0, a3
1234 ; CHECK-NEXT:    vl8re64.v v16, (a3)
1235 ; CHECK-NEXT:    sub a3, a4, a1
1236 ; CHECK-NEXT:    sltu a5, a4, a3
1237 ; CHECK-NEXT:    vl8re64.v v8, (a2)
1238 ; CHECK-NEXT:    addi a2, sp, 16
1239 ; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1240 ; CHECK-NEXT:    vl8re64.v v0, (a0)
1241 ; CHECK-NEXT:    addi a5, a5, -1
1242 ; CHECK-NEXT:    and a3, a5, a3
1243 ; CHECK-NEXT:    csrr a0, vlenb
1244 ; CHECK-NEXT:    slli a0, a0, 3
1245 ; CHECK-NEXT:    add a0, sp, a0
1246 ; CHECK-NEXT:    addi a0, a0, 16
1247 ; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1248 ; CHECK-NEXT:    vsetvli zero, a3, e64, m8, ta, ma
1249 ; CHECK-NEXT:    vfmadd.vv v16, v8, v24
1250 ; CHECK-NEXT:    bltu a4, a1, .LBB93_2
1251 ; CHECK-NEXT:  # %bb.1:
1252 ; CHECK-NEXT:    mv a4, a1
1253 ; CHECK-NEXT:  .LBB93_2:
1254 ; CHECK-NEXT:    csrr a0, vlenb
1255 ; CHECK-NEXT:    slli a0, a0, 4
1256 ; CHECK-NEXT:    add a0, sp, a0
1257 ; CHECK-NEXT:    addi a0, a0, 16
1258 ; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1259 ; CHECK-NEXT:    addi a0, sp, 16
1260 ; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1261 ; CHECK-NEXT:    vsetvli zero, a4, e64, m8, ta, ma
1262 ; CHECK-NEXT:    vfmadd.vv v0, v24, v8
1263 ; CHECK-NEXT:    vmv.v.v v8, v0
1264 ; CHECK-NEXT:    csrr a0, vlenb
1265 ; CHECK-NEXT:    li a1, 24
1266 ; CHECK-NEXT:    mul a0, a0, a1
1267 ; CHECK-NEXT:    add sp, sp, a0
1268 ; CHECK-NEXT:    addi sp, sp, 16
1269 ; CHECK-NEXT:    ret
1270   %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)
1271   ret <vscale x 16 x double> %v
1274 declare <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
1276 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) {
1277 ; CHECK-LABEL: vfmsub_vv_nxv1f16:
1278 ; CHECK:       # %bb.0:
1279 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1280 ; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
1281 ; CHECK-NEXT:    vmv1r.v v8, v9
1282 ; CHECK-NEXT:    ret
1283   %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)
1284   %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)
1285   ret <vscale x 1 x half> %v
1288 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) {
1289 ; CHECK-LABEL: vfmsub_vv_nxv1f16_unmasked:
1290 ; CHECK:       # %bb.0:
1291 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1292 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
1293 ; CHECK-NEXT:    ret
1294   %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)
1295   %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)
1296   ret <vscale x 1 x half> %v
1299 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) {
1300 ; CHECK-LABEL: vfmsub_vf_nxv1f16:
1301 ; CHECK:       # %bb.0:
1302 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1303 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1304 ; CHECK-NEXT:    ret
1305   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1306   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1307   %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)
1308   %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)
1309   ret <vscale x 1 x half> %v
1312 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) {
1313 ; CHECK-LABEL: vfmsub_vf_nxv1f16_commute:
1314 ; CHECK:       # %bb.0:
1315 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1316 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1317 ; CHECK-NEXT:    ret
1318   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1319   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1320   %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)
1321   %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)
1322   ret <vscale x 1 x half> %v
1325 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) {
1326 ; CHECK-LABEL: vfmsub_vf_nxv1f16_unmasked:
1327 ; CHECK:       # %bb.0:
1328 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1329 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1335   ret <vscale x 1 x half> %v
1338 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) {
1339 ; CHECK-LABEL: vfmsub_vf_nxv1f16_unmasked_commute:
1340 ; CHECK:       # %bb.0:
1341 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1342 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1348   ret <vscale x 1 x half> %v
1351 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) {
1352 ; CHECK-LABEL: vfnmadd_vv_nxv1f16:
1353 ; CHECK:       # %bb.0:
1354 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1355 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
1356 ; CHECK-NEXT:    vmv1r.v v8, v9
1357 ; CHECK-NEXT:    ret
1358   %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)
1359   %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)
1360   %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)
1361   ret <vscale x 1 x half> %v
1364 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) {
1365 ; CHECK-LABEL: vfnmadd_vv_nxv1f16_commuted:
1366 ; CHECK:       # %bb.0:
1367 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1368 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1369 ; CHECK-NEXT:    ret
1370   %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)
1371   %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)
1372   %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)
1373   ret <vscale x 1 x half> %v
1376 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) {
1377 ; CHECK-LABEL: vfnmadd_vv_nxv1f16_unmasked:
1378 ; CHECK:       # %bb.0:
1379 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1380 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1381 ; CHECK-NEXT:    ret
1382   %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)
1383   %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)
1384   %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)
1385   ret <vscale x 1 x half> %v
1388 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) {
1389 ; CHECK-LABEL: vfnmadd_vv_nxv1f16_unmasked_commuted:
1390 ; CHECK:       # %bb.0:
1391 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1392 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1393 ; CHECK-NEXT:    ret
1394   %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)
1395   %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)
1396   %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)
1397   ret <vscale x 1 x half> %v
1400 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) {
1401 ; CHECK-LABEL: vfnmadd_vf_nxv1f16:
1402 ; CHECK:       # %bb.0:
1403 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1404 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1405 ; CHECK-NEXT:    ret
1406   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1407   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1408   %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)
1409   %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)
1410   %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)
1411   ret <vscale x 1 x half> %v
1414 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) {
1415 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_commute:
1416 ; CHECK:       # %bb.0:
1417 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1418 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1419 ; CHECK-NEXT:    ret
1420   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1421   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1422   %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)
1423   %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)
1424   %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)
1425   ret <vscale x 1 x half> %v
1428 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) {
1429 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_unmasked:
1430 ; CHECK:       # %bb.0:
1431 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1432 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1433 ; CHECK-NEXT:    ret
1434   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1435   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1436   %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)
1437   %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)
1438   %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)
1439   ret <vscale x 1 x half> %v
1442 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) {
1443 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_unmasked_commute:
1444 ; CHECK:       # %bb.0:
1445 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1446 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1447 ; CHECK-NEXT:    ret
1448   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1449   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1450   %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)
1451   %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)
1452   %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)
1453   ret <vscale x 1 x half> %v
1456 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) {
1457 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat:
1458 ; CHECK:       # %bb.0:
1459 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1460 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1461 ; CHECK-NEXT:    ret
1462   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1463   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1464   %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)
1465   %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)
1466   %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)
1467   ret <vscale x 1 x half> %v
1470 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) {
1471 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_commute:
1472 ; CHECK:       # %bb.0:
1473 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1474 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1475 ; CHECK-NEXT:    ret
1476   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1477   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1478   %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)
1479   %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)
1480   %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)
1481   ret <vscale x 1 x half> %v
1484 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) {
1485 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked:
1486 ; CHECK:       # %bb.0:
1487 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1488 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1489 ; CHECK-NEXT:    ret
1490   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1491   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1492   %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)
1493   %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)
1494   %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)
1495   ret <vscale x 1 x half> %v
1498 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) {
1499 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked_commute:
1500 ; CHECK:       # %bb.0:
1501 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1502 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1503 ; CHECK-NEXT:    ret
1504   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1505   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1506   %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)
1507   %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)
1508   %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)
1509   ret <vscale x 1 x half> %v
1512 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) {
1513 ; CHECK-LABEL: vfnmsub_vv_nxv1f16:
1514 ; CHECK:       # %bb.0:
1515 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1516 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
1517 ; CHECK-NEXT:    vmv1r.v v8, v9
1518 ; CHECK-NEXT:    ret
1519   %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)
1520   %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)
1521   %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)
1522   ret <vscale x 1 x half> %v
1525 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) {
1526 ; CHECK-LABEL: vfnmsub_vv_nxv1f16_commuted:
1527 ; CHECK:       # %bb.0:
1528 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1529 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1530 ; CHECK-NEXT:    ret
1531   %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)
1532   %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)
1533   %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)
1534   ret <vscale x 1 x half> %v
1537 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) {
1538 ; CHECK-LABEL: vfnmsub_vv_nxv1f16_unmasked:
1539 ; CHECK:       # %bb.0:
1540 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1541 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1542 ; CHECK-NEXT:    ret
1543   %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)
1544   %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)
1545   %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)
1546   ret <vscale x 1 x half> %v
1549 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) {
1550 ; CHECK-LABEL: vfnmsub_vv_nxv1f16_unmasked_commuted:
1551 ; CHECK:       # %bb.0:
1552 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1553 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1554 ; CHECK-NEXT:    ret
1555   %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)
1556   %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)
1557   %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)
1558   ret <vscale x 1 x half> %v
1561 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) {
1562 ; CHECK-LABEL: vfnmsub_vf_nxv1f16:
1563 ; CHECK:       # %bb.0:
1564 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1565 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1566 ; CHECK-NEXT:    ret
1567   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1568   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1569   %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)
1570   %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)
1571   ret <vscale x 1 x half> %v
1574 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) {
1575 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_commute:
1576 ; CHECK:       # %bb.0:
1577 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1578 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1579 ; CHECK-NEXT:    ret
1580   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1581   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1582   %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)
1583   %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)
1584   ret <vscale x 1 x half> %v
1587 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) {
1588 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_unmasked:
1589 ; CHECK:       # %bb.0:
1590 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1591 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1597   ret <vscale x 1 x half> %v
1600 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) {
1601 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_unmasked_commute:
1602 ; CHECK:       # %bb.0:
1603 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1604 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1610   ret <vscale x 1 x half> %v
1613 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) {
1614 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat:
1615 ; CHECK:       # %bb.0:
1616 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1617 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
1622   %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)
1623   ret <vscale x 1 x half> %v
1626 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) {
1627 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_commute:
1628 ; CHECK:       # %bb.0:
1629 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1630 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
1635   %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)
1636   ret <vscale x 1 x half> %v
1639 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) {
1640 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked:
1641 ; CHECK:       # %bb.0:
1642 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1643 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1649   ret <vscale x 1 x half> %v
1652 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) {
1653 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked_commute:
1654 ; CHECK:       # %bb.0:
1655 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1656 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1662   ret <vscale x 1 x half> %v
1665 declare <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
1667 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) {
1668 ; CHECK-LABEL: vfmsub_vv_nxv2f16:
1669 ; CHECK:       # %bb.0:
1670 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1671 ; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
1672 ; CHECK-NEXT:    vmv1r.v v8, v9
1673 ; CHECK-NEXT:    ret
1674   %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)
1675   %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)
1676   ret <vscale x 2 x half> %v
1679 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) {
1680 ; CHECK-LABEL: vfmsub_vv_nxv2f16_unmasked:
1681 ; CHECK:       # %bb.0:
1682 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1683 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
1684 ; CHECK-NEXT:    ret
1685   %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)
1686   %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)
1687   ret <vscale x 2 x half> %v
1690 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) {
1691 ; CHECK-LABEL: vfmsub_vf_nxv2f16:
1692 ; CHECK:       # %bb.0:
1693 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1694 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1695 ; CHECK-NEXT:    ret
1696   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1697   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1698   %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)
1699   %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)
1700   ret <vscale x 2 x half> %v
1703 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) {
1704 ; CHECK-LABEL: vfmsub_vf_nxv2f16_commute:
1705 ; CHECK:       # %bb.0:
1706 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1707 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1708 ; CHECK-NEXT:    ret
1709   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1710   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1711   %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)
1712   %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)
1713   ret <vscale x 2 x half> %v
1716 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) {
1717 ; CHECK-LABEL: vfmsub_vf_nxv2f16_unmasked:
1718 ; CHECK:       # %bb.0:
1719 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1720 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1726   ret <vscale x 2 x half> %v
1729 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) {
1730 ; CHECK-LABEL: vfmsub_vf_nxv2f16_unmasked_commute:
1731 ; CHECK:       # %bb.0:
1732 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1733 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1739   ret <vscale x 2 x half> %v
1742 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) {
1743 ; CHECK-LABEL: vfnmadd_vv_nxv2f16:
1744 ; CHECK:       # %bb.0:
1745 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1746 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
1747 ; CHECK-NEXT:    vmv1r.v v8, v9
1748 ; CHECK-NEXT:    ret
1749   %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)
1750   %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)
1751   %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)
1752   ret <vscale x 2 x half> %v
1755 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) {
1756 ; CHECK-LABEL: vfnmadd_vv_nxv2f16_commuted:
1757 ; CHECK:       # %bb.0:
1758 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1759 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1760 ; CHECK-NEXT:    ret
1761   %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)
1762   %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)
1763   %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)
1764   ret <vscale x 2 x half> %v
1767 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) {
1768 ; CHECK-LABEL: vfnmadd_vv_nxv2f16_unmasked:
1769 ; CHECK:       # %bb.0:
1770 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1771 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1772 ; CHECK-NEXT:    ret
1773   %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)
1774   %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)
1775   %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)
1776   ret <vscale x 2 x half> %v
1779 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) {
1780 ; CHECK-LABEL: vfnmadd_vv_nxv2f16_unmasked_commuted:
1781 ; CHECK:       # %bb.0:
1782 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1783 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1784 ; CHECK-NEXT:    ret
1785   %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)
1786   %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)
1787   %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)
1788   ret <vscale x 2 x half> %v
1791 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) {
1792 ; CHECK-LABEL: vfnmadd_vf_nxv2f16:
1793 ; CHECK:       # %bb.0:
1794 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1795 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1796 ; CHECK-NEXT:    ret
1797   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1798   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1799   %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)
1800   %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)
1801   %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)
1802   ret <vscale x 2 x half> %v
1805 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) {
1806 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_commute:
1807 ; CHECK:       # %bb.0:
1808 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1809 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1810 ; CHECK-NEXT:    ret
1811   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1812   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1813   %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)
1814   %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)
1815   %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)
1816   ret <vscale x 2 x half> %v
1819 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) {
1820 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_unmasked:
1821 ; CHECK:       # %bb.0:
1822 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1823 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1824 ; CHECK-NEXT:    ret
1825   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1826   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1827   %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)
1828   %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)
1829   %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)
1830   ret <vscale x 2 x half> %v
1833 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) {
1834 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_unmasked_commute:
1835 ; CHECK:       # %bb.0:
1836 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1837 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1838 ; CHECK-NEXT:    ret
1839   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1840   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1841   %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)
1842   %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)
1843   %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)
1844   ret <vscale x 2 x half> %v
1847 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) {
1848 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat:
1849 ; CHECK:       # %bb.0:
1850 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1851 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1852 ; CHECK-NEXT:    ret
1853   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1854   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1855   %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)
1856   %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)
1857   %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)
1858   ret <vscale x 2 x half> %v
1861 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) {
1862 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_commute:
1863 ; CHECK:       # %bb.0:
1864 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1865 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1866 ; CHECK-NEXT:    ret
1867   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1868   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1869   %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)
1870   %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)
1871   %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)
1872   ret <vscale x 2 x half> %v
1875 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) {
1876 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked:
1877 ; CHECK:       # %bb.0:
1878 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1879 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1880 ; CHECK-NEXT:    ret
1881   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1882   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1883   %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)
1884   %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)
1885   %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)
1886   ret <vscale x 2 x half> %v
1889 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) {
1890 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked_commute:
1891 ; CHECK:       # %bb.0:
1892 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1893 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1894 ; CHECK-NEXT:    ret
1895   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1896   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1897   %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)
1898   %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)
1899   %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)
1900   ret <vscale x 2 x half> %v
1903 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) {
1904 ; CHECK-LABEL: vfnmsub_vv_nxv2f16:
1905 ; CHECK:       # %bb.0:
1906 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1907 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
1908 ; CHECK-NEXT:    vmv1r.v v8, v9
1909 ; CHECK-NEXT:    ret
1910   %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)
1911   %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)
1912   %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)
1913   ret <vscale x 2 x half> %v
1916 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) {
1917 ; CHECK-LABEL: vfnmsub_vv_nxv2f16_commuted:
1918 ; CHECK:       # %bb.0:
1919 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1920 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1921 ; CHECK-NEXT:    ret
1922   %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)
1923   %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)
1924   %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)
1925   ret <vscale x 2 x half> %v
1928 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) {
1929 ; CHECK-LABEL: vfnmsub_vv_nxv2f16_unmasked:
1930 ; CHECK:       # %bb.0:
1931 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1932 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1933 ; CHECK-NEXT:    ret
1934   %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)
1935   %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)
1936   %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)
1937   ret <vscale x 2 x half> %v
1940 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) {
1941 ; CHECK-LABEL: vfnmsub_vv_nxv2f16_unmasked_commuted:
1942 ; CHECK:       # %bb.0:
1943 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1944 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1945 ; CHECK-NEXT:    ret
1946   %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)
1947   %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)
1948   %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)
1949   ret <vscale x 2 x half> %v
1952 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) {
1953 ; CHECK-LABEL: vfnmsub_vf_nxv2f16:
1954 ; CHECK:       # %bb.0:
1955 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1956 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1957 ; CHECK-NEXT:    ret
1958   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1959   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1960   %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)
1961   %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)
1962   ret <vscale x 2 x half> %v
1965 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) {
1966 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_commute:
1967 ; CHECK:       # %bb.0:
1968 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1969 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1970 ; CHECK-NEXT:    ret
1971   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1972   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1973   %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)
1974   %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)
1975   ret <vscale x 2 x half> %v
1978 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) {
1979 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_unmasked:
1980 ; CHECK:       # %bb.0:
1981 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1982 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
1988   ret <vscale x 2 x half> %v
1991 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) {
1992 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_unmasked_commute:
1993 ; CHECK:       # %bb.0:
1994 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1995 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2001   ret <vscale x 2 x half> %v
2004 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) {
2005 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat:
2006 ; CHECK:       # %bb.0:
2007 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2008 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
2013   %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)
2014   ret <vscale x 2 x half> %v
2017 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) {
2018 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_commute:
2019 ; CHECK:       # %bb.0:
2020 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2021 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
2026   %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)
2027   ret <vscale x 2 x half> %v
2030 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) {
2031 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked:
2032 ; CHECK:       # %bb.0:
2033 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2034 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2040   ret <vscale x 2 x half> %v
2043 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) {
2044 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked_commute:
2045 ; CHECK:       # %bb.0:
2046 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2047 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2053   ret <vscale x 2 x half> %v
2056 declare <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
2058 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) {
2059 ; CHECK-LABEL: vfmsub_vv_nxv4f16:
2060 ; CHECK:       # %bb.0:
2061 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2062 ; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
2063 ; CHECK-NEXT:    vmv.v.v v8, v9
2064 ; CHECK-NEXT:    ret
2065   %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)
2066   %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)
2067   ret <vscale x 4 x half> %v
2070 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) {
2071 ; CHECK-LABEL: vfmsub_vv_nxv4f16_unmasked:
2072 ; CHECK:       # %bb.0:
2073 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2074 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
2075 ; CHECK-NEXT:    ret
2076   %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)
2077   %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)
2078   ret <vscale x 4 x half> %v
2081 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) {
2082 ; CHECK-LABEL: vfmsub_vf_nxv4f16:
2083 ; CHECK:       # %bb.0:
2084 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2085 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
2086 ; CHECK-NEXT:    ret
2087   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2088   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2089   %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)
2090   %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)
2091   ret <vscale x 4 x half> %v
2094 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) {
2095 ; CHECK-LABEL: vfmsub_vf_nxv4f16_commute:
2096 ; CHECK:       # %bb.0:
2097 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2098 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
2099 ; CHECK-NEXT:    ret
2100   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2101   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2102   %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)
2103   %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)
2104   ret <vscale x 4 x half> %v
2107 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) {
2108 ; CHECK-LABEL: vfmsub_vf_nxv4f16_unmasked:
2109 ; CHECK:       # %bb.0:
2110 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2111 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2117   ret <vscale x 4 x half> %v
2120 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) {
2121 ; CHECK-LABEL: vfmsub_vf_nxv4f16_unmasked_commute:
2122 ; CHECK:       # %bb.0:
2123 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2124 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2130   ret <vscale x 4 x half> %v
2133 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) {
2134 ; CHECK-LABEL: vfnmadd_vv_nxv4f16:
2135 ; CHECK:       # %bb.0:
2136 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2137 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
2138 ; CHECK-NEXT:    vmv.v.v v8, v9
2139 ; CHECK-NEXT:    ret
2140   %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)
2141   %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)
2142   %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)
2143   ret <vscale x 4 x half> %v
2146 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) {
2147 ; CHECK-LABEL: vfnmadd_vv_nxv4f16_commuted:
2148 ; CHECK:       # %bb.0:
2149 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2150 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
2151 ; CHECK-NEXT:    ret
2152   %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)
2153   %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)
2154   %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)
2155   ret <vscale x 4 x half> %v
2158 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) {
2159 ; CHECK-LABEL: vfnmadd_vv_nxv4f16_unmasked:
2160 ; CHECK:       # %bb.0:
2161 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2162 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2163 ; CHECK-NEXT:    ret
2164   %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)
2165   %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)
2166   %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)
2167   ret <vscale x 4 x half> %v
2170 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) {
2171 ; CHECK-LABEL: vfnmadd_vv_nxv4f16_unmasked_commuted:
2172 ; CHECK:       # %bb.0:
2173 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2174 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2175 ; CHECK-NEXT:    ret
2176   %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)
2177   %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)
2178   %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)
2179   ret <vscale x 4 x half> %v
2182 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) {
2183 ; CHECK-LABEL: vfnmadd_vf_nxv4f16:
2184 ; CHECK:       # %bb.0:
2185 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2186 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2187 ; CHECK-NEXT:    ret
2188   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2189   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2190   %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)
2191   %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)
2192   %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)
2193   ret <vscale x 4 x half> %v
2196 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) {
2197 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_commute:
2198 ; CHECK:       # %bb.0:
2199 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2200 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2201 ; CHECK-NEXT:    ret
2202   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2203   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2204   %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)
2205   %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)
2206   %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)
2207   ret <vscale x 4 x half> %v
2210 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) {
2211 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_unmasked:
2212 ; CHECK:       # %bb.0:
2213 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2214 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2215 ; CHECK-NEXT:    ret
2216   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2217   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2218   %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)
2219   %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)
2220   %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)
2221   ret <vscale x 4 x half> %v
2224 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) {
2225 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_unmasked_commute:
2226 ; CHECK:       # %bb.0:
2227 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2228 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2229 ; CHECK-NEXT:    ret
2230   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2231   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2232   %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)
2233   %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)
2234   %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)
2235   ret <vscale x 4 x half> %v
2238 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) {
2239 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat:
2240 ; CHECK:       # %bb.0:
2241 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2242 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2243 ; CHECK-NEXT:    ret
2244   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2245   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2246   %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)
2247   %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)
2248   %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)
2249   ret <vscale x 4 x half> %v
2252 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) {
2253 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_commute:
2254 ; CHECK:       # %bb.0:
2255 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2256 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2257 ; CHECK-NEXT:    ret
2258   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2259   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2260   %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)
2261   %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)
2262   %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)
2263   ret <vscale x 4 x half> %v
2266 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) {
2267 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked:
2268 ; CHECK:       # %bb.0:
2269 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2270 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2271 ; CHECK-NEXT:    ret
2272   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2273   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2274   %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)
2275   %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)
2276   %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)
2277   ret <vscale x 4 x half> %v
2280 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) {
2281 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked_commute:
2282 ; CHECK:       # %bb.0:
2283 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2284 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2285 ; CHECK-NEXT:    ret
2286   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2287   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2288   %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)
2289   %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)
2290   %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)
2291   ret <vscale x 4 x half> %v
2294 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) {
2295 ; CHECK-LABEL: vfnmsub_vv_nxv4f16:
2296 ; CHECK:       # %bb.0:
2297 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2298 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
2299 ; CHECK-NEXT:    vmv.v.v v8, v9
2300 ; CHECK-NEXT:    ret
2301   %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)
2302   %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)
2303   %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)
2304   ret <vscale x 4 x half> %v
2307 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) {
2308 ; CHECK-LABEL: vfnmsub_vv_nxv4f16_commuted:
2309 ; CHECK:       # %bb.0:
2310 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2311 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
2312 ; CHECK-NEXT:    ret
2313   %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)
2314   %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)
2315   %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)
2316   ret <vscale x 4 x half> %v
2319 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) {
2320 ; CHECK-LABEL: vfnmsub_vv_nxv4f16_unmasked:
2321 ; CHECK:       # %bb.0:
2322 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2323 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2324 ; CHECK-NEXT:    ret
2325   %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)
2326   %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)
2327   %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)
2328   ret <vscale x 4 x half> %v
2331 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) {
2332 ; CHECK-LABEL: vfnmsub_vv_nxv4f16_unmasked_commuted:
2333 ; CHECK:       # %bb.0:
2334 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2335 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2336 ; CHECK-NEXT:    ret
2337   %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)
2338   %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)
2339   %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)
2340   ret <vscale x 4 x half> %v
2343 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) {
2344 ; CHECK-LABEL: vfnmsub_vf_nxv4f16:
2345 ; CHECK:       # %bb.0:
2346 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2347 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2348 ; CHECK-NEXT:    ret
2349   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2350   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2351   %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)
2352   %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)
2353   ret <vscale x 4 x half> %v
2356 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) {
2357 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_commute:
2358 ; CHECK:       # %bb.0:
2359 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2360 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2361 ; CHECK-NEXT:    ret
2362   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2363   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2364   %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)
2365   %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)
2366   ret <vscale x 4 x half> %v
2369 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) {
2370 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_unmasked:
2371 ; CHECK:       # %bb.0:
2372 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2373 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2379   ret <vscale x 4 x half> %v
2382 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) {
2383 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_unmasked_commute:
2384 ; CHECK:       # %bb.0:
2385 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2386 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2392   ret <vscale x 4 x half> %v
2395 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) {
2396 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat:
2397 ; CHECK:       # %bb.0:
2398 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2399 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
2404   %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)
2405   ret <vscale x 4 x half> %v
2408 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) {
2409 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_commute:
2410 ; CHECK:       # %bb.0:
2411 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2412 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
2417   %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)
2418   ret <vscale x 4 x half> %v
2421 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) {
2422 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked:
2423 ; CHECK:       # %bb.0:
2424 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2425 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2431   ret <vscale x 4 x half> %v
2434 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) {
2435 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked_commute:
2436 ; CHECK:       # %bb.0:
2437 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2438 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2444   ret <vscale x 4 x half> %v
2447 declare <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
2449 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) {
2450 ; CHECK-LABEL: vfmsub_vv_nxv8f16:
2451 ; CHECK:       # %bb.0:
2452 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2453 ; CHECK-NEXT:    vfmsub.vv v10, v8, v12, v0.t
2454 ; CHECK-NEXT:    vmv.v.v v8, v10
2455 ; CHECK-NEXT:    ret
2456   %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)
2457   %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)
2458   ret <vscale x 8 x half> %v
2461 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) {
2462 ; CHECK-LABEL: vfmsub_vv_nxv8f16_unmasked:
2463 ; CHECK:       # %bb.0:
2464 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2465 ; CHECK-NEXT:    vfmsub.vv v8, v10, v12
2466 ; CHECK-NEXT:    ret
2467   %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)
2468   %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)
2469   ret <vscale x 8 x half> %v
2472 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) {
2473 ; CHECK-LABEL: vfmsub_vf_nxv8f16:
2474 ; CHECK:       # %bb.0:
2475 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2476 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
2477 ; CHECK-NEXT:    ret
2478   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2479   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2480   %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)
2481   %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)
2482   ret <vscale x 8 x half> %v
2485 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) {
2486 ; CHECK-LABEL: vfmsub_vf_nxv8f16_commute:
2487 ; CHECK:       # %bb.0:
2488 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2489 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
2490 ; CHECK-NEXT:    ret
2491   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2492   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2493   %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)
2494   %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)
2495   ret <vscale x 8 x half> %v
2498 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) {
2499 ; CHECK-LABEL: vfmsub_vf_nxv8f16_unmasked:
2500 ; CHECK:       # %bb.0:
2501 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2502 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2508   ret <vscale x 8 x half> %v
2511 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) {
2512 ; CHECK-LABEL: vfmsub_vf_nxv8f16_unmasked_commute:
2513 ; CHECK:       # %bb.0:
2514 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2515 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2521   ret <vscale x 8 x half> %v
2524 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) {
2525 ; CHECK-LABEL: vfnmadd_vv_nxv8f16:
2526 ; CHECK:       # %bb.0:
2527 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2528 ; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
2529 ; CHECK-NEXT:    vmv.v.v v8, v10
2530 ; CHECK-NEXT:    ret
2531   %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)
2532   %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)
2533   %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)
2534   ret <vscale x 8 x half> %v
2537 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) {
2538 ; CHECK-LABEL: vfnmadd_vv_nxv8f16_commuted:
2539 ; CHECK:       # %bb.0:
2540 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2541 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
2542 ; CHECK-NEXT:    ret
2543   %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)
2544   %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)
2545   %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)
2546   ret <vscale x 8 x half> %v
2549 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) {
2550 ; CHECK-LABEL: vfnmadd_vv_nxv8f16_unmasked:
2551 ; CHECK:       # %bb.0:
2552 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2553 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2554 ; CHECK-NEXT:    ret
2555   %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)
2556   %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)
2557   %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)
2558   ret <vscale x 8 x half> %v
2561 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) {
2562 ; CHECK-LABEL: vfnmadd_vv_nxv8f16_unmasked_commuted:
2563 ; CHECK:       # %bb.0:
2564 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2565 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2566 ; CHECK-NEXT:    ret
2567   %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)
2568   %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)
2569   %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)
2570   ret <vscale x 8 x half> %v
2573 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) {
2574 ; CHECK-LABEL: vfnmadd_vf_nxv8f16:
2575 ; CHECK:       # %bb.0:
2576 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2577 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2578 ; CHECK-NEXT:    ret
2579   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2580   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2581   %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)
2582   %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)
2583   %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)
2584   ret <vscale x 8 x half> %v
2587 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) {
2588 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_commute:
2589 ; CHECK:       # %bb.0:
2590 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2591 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2592 ; CHECK-NEXT:    ret
2593   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2594   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2595   %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)
2596   %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)
2597   %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)
2598   ret <vscale x 8 x half> %v
2601 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) {
2602 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_unmasked:
2603 ; CHECK:       # %bb.0:
2604 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2605 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2606 ; CHECK-NEXT:    ret
2607   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2608   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2609   %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)
2610   %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)
2611   %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)
2612   ret <vscale x 8 x half> %v
2615 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) {
2616 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_unmasked_commute:
2617 ; CHECK:       # %bb.0:
2618 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2619 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2620 ; CHECK-NEXT:    ret
2621   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2622   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2623   %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)
2624   %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)
2625   %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)
2626   ret <vscale x 8 x half> %v
2629 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) {
2630 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat:
2631 ; CHECK:       # %bb.0:
2632 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2633 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2634 ; CHECK-NEXT:    ret
2635   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2636   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2637   %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)
2638   %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)
2639   %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)
2640   ret <vscale x 8 x half> %v
2643 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) {
2644 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_commute:
2645 ; CHECK:       # %bb.0:
2646 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2647 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2648 ; CHECK-NEXT:    ret
2649   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2650   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2651   %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)
2652   %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)
2653   %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)
2654   ret <vscale x 8 x half> %v
2657 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) {
2658 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked:
2659 ; CHECK:       # %bb.0:
2660 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2661 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2662 ; CHECK-NEXT:    ret
2663   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2664   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2665   %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)
2666   %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)
2667   %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)
2668   ret <vscale x 8 x half> %v
2671 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) {
2672 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked_commute:
2673 ; CHECK:       # %bb.0:
2674 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2675 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2676 ; CHECK-NEXT:    ret
2677   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2678   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2679   %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)
2680   %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)
2681   %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)
2682   ret <vscale x 8 x half> %v
2685 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) {
2686 ; CHECK-LABEL: vfnmsub_vv_nxv8f16:
2687 ; CHECK:       # %bb.0:
2688 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2689 ; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
2690 ; CHECK-NEXT:    vmv.v.v v8, v10
2691 ; CHECK-NEXT:    ret
2692   %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)
2693   %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)
2694   %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)
2695   ret <vscale x 8 x half> %v
2698 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) {
2699 ; CHECK-LABEL: vfnmsub_vv_nxv8f16_commuted:
2700 ; CHECK:       # %bb.0:
2701 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2702 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
2703 ; CHECK-NEXT:    ret
2704   %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)
2705   %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)
2706   %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)
2707   ret <vscale x 8 x half> %v
2710 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) {
2711 ; CHECK-LABEL: vfnmsub_vv_nxv8f16_unmasked:
2712 ; CHECK:       # %bb.0:
2713 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2714 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2715 ; CHECK-NEXT:    ret
2716   %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)
2717   %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)
2718   %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)
2719   ret <vscale x 8 x half> %v
2722 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) {
2723 ; CHECK-LABEL: vfnmsub_vv_nxv8f16_unmasked_commuted:
2724 ; CHECK:       # %bb.0:
2725 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2726 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2727 ; CHECK-NEXT:    ret
2728   %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)
2729   %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)
2730   %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)
2731   ret <vscale x 8 x half> %v
2734 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) {
2735 ; CHECK-LABEL: vfnmsub_vf_nxv8f16:
2736 ; CHECK:       # %bb.0:
2737 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2738 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
2739 ; CHECK-NEXT:    ret
2740   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2741   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2742   %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)
2743   %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)
2744   ret <vscale x 8 x half> %v
2747 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) {
2748 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_commute:
2749 ; CHECK:       # %bb.0:
2750 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2751 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
2752 ; CHECK-NEXT:    ret
2753   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2754   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2755   %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)
2756   %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)
2757   ret <vscale x 8 x half> %v
2760 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) {
2761 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_unmasked:
2762 ; CHECK:       # %bb.0:
2763 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2764 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2770   ret <vscale x 8 x half> %v
2773 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) {
2774 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_unmasked_commute:
2775 ; CHECK:       # %bb.0:
2776 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2777 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2783   ret <vscale x 8 x half> %v
2786 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) {
2787 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat:
2788 ; CHECK:       # %bb.0:
2789 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2790 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
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   %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)
2795   %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)
2796   ret <vscale x 8 x half> %v
2799 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) {
2800 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_commute:
2801 ; CHECK:       # %bb.0:
2802 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2803 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
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   %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)
2808   %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)
2809   ret <vscale x 8 x half> %v
2812 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) {
2813 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked:
2814 ; CHECK:       # %bb.0:
2815 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2816 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2822   ret <vscale x 8 x half> %v
2825 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) {
2826 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked_commute:
2827 ; CHECK:       # %bb.0:
2828 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2829 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2835   ret <vscale x 8 x half> %v
2838 declare <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
2840 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) {
2841 ; CHECK-LABEL: vfmsub_vv_nxv16f16:
2842 ; CHECK:       # %bb.0:
2843 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2844 ; CHECK-NEXT:    vfmsub.vv v12, v8, v16, v0.t
2845 ; CHECK-NEXT:    vmv.v.v v8, v12
2846 ; CHECK-NEXT:    ret
2847   %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)
2848   %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)
2849   ret <vscale x 16 x half> %v
2852 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) {
2853 ; CHECK-LABEL: vfmsub_vv_nxv16f16_unmasked:
2854 ; CHECK:       # %bb.0:
2855 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2856 ; CHECK-NEXT:    vfmsub.vv v8, v12, v16
2857 ; CHECK-NEXT:    ret
2858   %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)
2859   %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)
2860   ret <vscale x 16 x half> %v
2863 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) {
2864 ; CHECK-LABEL: vfmsub_vf_nxv16f16:
2865 ; CHECK:       # %bb.0:
2866 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2867 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
2868 ; CHECK-NEXT:    ret
2869   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2870   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2871   %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)
2872   %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)
2873   ret <vscale x 16 x half> %v
2876 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) {
2877 ; CHECK-LABEL: vfmsub_vf_nxv16f16_commute:
2878 ; CHECK:       # %bb.0:
2879 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2880 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
2881 ; CHECK-NEXT:    ret
2882   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2883   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2884   %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)
2885   %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)
2886   ret <vscale x 16 x half> %v
2889 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) {
2890 ; CHECK-LABEL: vfmsub_vf_nxv16f16_unmasked:
2891 ; CHECK:       # %bb.0:
2892 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2893 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2899   ret <vscale x 16 x half> %v
2902 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) {
2903 ; CHECK-LABEL: vfmsub_vf_nxv16f16_unmasked_commute:
2904 ; CHECK:       # %bb.0:
2905 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2906 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
2912   ret <vscale x 16 x half> %v
2915 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) {
2916 ; CHECK-LABEL: vfnmadd_vv_nxv16f16:
2917 ; CHECK:       # %bb.0:
2918 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2919 ; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
2920 ; CHECK-NEXT:    vmv.v.v v8, v12
2921 ; CHECK-NEXT:    ret
2922   %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)
2923   %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)
2924   %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)
2925   ret <vscale x 16 x half> %v
2928 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) {
2929 ; CHECK-LABEL: vfnmadd_vv_nxv16f16_commuted:
2930 ; CHECK:       # %bb.0:
2931 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2932 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
2933 ; CHECK-NEXT:    ret
2934   %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)
2935   %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)
2936   %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)
2937   ret <vscale x 16 x half> %v
2940 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) {
2941 ; CHECK-LABEL: vfnmadd_vv_nxv16f16_unmasked:
2942 ; CHECK:       # %bb.0:
2943 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2944 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
2945 ; CHECK-NEXT:    ret
2946   %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)
2947   %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)
2948   %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)
2949   ret <vscale x 16 x half> %v
2952 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) {
2953 ; CHECK-LABEL: vfnmadd_vv_nxv16f16_unmasked_commuted:
2954 ; CHECK:       # %bb.0:
2955 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2956 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
2957 ; CHECK-NEXT:    ret
2958   %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)
2959   %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)
2960   %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)
2961   ret <vscale x 16 x half> %v
2964 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) {
2965 ; CHECK-LABEL: vfnmadd_vf_nxv16f16:
2966 ; CHECK:       # %bb.0:
2967 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2968 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
2969 ; CHECK-NEXT:    ret
2970   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2971   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2972   %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)
2973   %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)
2974   %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)
2975   ret <vscale x 16 x half> %v
2978 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) {
2979 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_commute:
2980 ; CHECK:       # %bb.0:
2981 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2982 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
2983 ; CHECK-NEXT:    ret
2984   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2985   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
2986   %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)
2987   %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)
2988   %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)
2989   ret <vscale x 16 x half> %v
2992 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) {
2993 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_unmasked:
2994 ; CHECK:       # %bb.0:
2995 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
2996 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
2997 ; CHECK-NEXT:    ret
2998   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
2999   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3000   %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)
3001   %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)
3002   %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)
3003   ret <vscale x 16 x half> %v
3006 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) {
3007 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_unmasked_commute:
3008 ; CHECK:       # %bb.0:
3009 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3010 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3011 ; CHECK-NEXT:    ret
3012   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3013   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3014   %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)
3015   %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)
3016   %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)
3017   ret <vscale x 16 x half> %v
3020 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) {
3021 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat:
3022 ; CHECK:       # %bb.0:
3023 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3024 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3025 ; CHECK-NEXT:    ret
3026   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3027   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3028   %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)
3029   %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)
3030   %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)
3031   ret <vscale x 16 x half> %v
3034 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) {
3035 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_commute:
3036 ; CHECK:       # %bb.0:
3037 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3038 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3039 ; CHECK-NEXT:    ret
3040   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3041   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3042   %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)
3043   %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)
3044   %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)
3045   ret <vscale x 16 x half> %v
3048 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) {
3049 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked:
3050 ; CHECK:       # %bb.0:
3051 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3052 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3053 ; CHECK-NEXT:    ret
3054   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3055   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3056   %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)
3057   %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)
3058   %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)
3059   ret <vscale x 16 x half> %v
3062 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) {
3063 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked_commute:
3064 ; CHECK:       # %bb.0:
3065 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3066 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3067 ; CHECK-NEXT:    ret
3068   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3069   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3070   %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)
3071   %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)
3072   %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)
3073   ret <vscale x 16 x half> %v
3076 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) {
3077 ; CHECK-LABEL: vfnmsub_vv_nxv16f16:
3078 ; CHECK:       # %bb.0:
3079 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3080 ; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
3081 ; CHECK-NEXT:    vmv.v.v v8, v12
3082 ; CHECK-NEXT:    ret
3083   %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)
3084   %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)
3085   %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)
3086   ret <vscale x 16 x half> %v
3089 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) {
3090 ; CHECK-LABEL: vfnmsub_vv_nxv16f16_commuted:
3091 ; CHECK:       # %bb.0:
3092 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3093 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
3094 ; CHECK-NEXT:    ret
3095   %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)
3096   %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)
3097   %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)
3098   ret <vscale x 16 x half> %v
3101 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) {
3102 ; CHECK-LABEL: vfnmsub_vv_nxv16f16_unmasked:
3103 ; CHECK:       # %bb.0:
3104 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3105 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
3106 ; CHECK-NEXT:    ret
3107   %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)
3108   %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)
3109   %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)
3110   ret <vscale x 16 x half> %v
3113 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) {
3114 ; CHECK-LABEL: vfnmsub_vv_nxv16f16_unmasked_commuted:
3115 ; CHECK:       # %bb.0:
3116 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3117 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
3118 ; CHECK-NEXT:    ret
3119   %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)
3120   %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)
3121   %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)
3122   ret <vscale x 16 x half> %v
3125 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) {
3126 ; CHECK-LABEL: vfnmsub_vf_nxv16f16:
3127 ; CHECK:       # %bb.0:
3128 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3129 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3130 ; CHECK-NEXT:    ret
3131   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3132   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3133   %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)
3134   %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)
3135   ret <vscale x 16 x half> %v
3138 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) {
3139 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_commute:
3140 ; CHECK:       # %bb.0:
3141 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3142 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3143 ; CHECK-NEXT:    ret
3144   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3145   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3146   %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)
3147   %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)
3148   ret <vscale x 16 x half> %v
3151 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) {
3152 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_unmasked:
3153 ; CHECK:       # %bb.0:
3154 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3155 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3161   ret <vscale x 16 x half> %v
3164 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) {
3165 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_unmasked_commute:
3166 ; CHECK:       # %bb.0:
3167 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3168 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3174   ret <vscale x 16 x half> %v
3177 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) {
3178 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat:
3179 ; CHECK:       # %bb.0:
3180 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3181 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
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   %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)
3186   %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)
3187   ret <vscale x 16 x half> %v
3190 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) {
3191 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_commute:
3192 ; CHECK:       # %bb.0:
3193 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3194 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
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   %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)
3199   %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)
3200   ret <vscale x 16 x half> %v
3203 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) {
3204 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked:
3205 ; CHECK:       # %bb.0:
3206 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3207 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3213   ret <vscale x 16 x half> %v
3216 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) {
3217 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked_commute:
3218 ; CHECK:       # %bb.0:
3219 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3220 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3226   ret <vscale x 16 x half> %v
3229 declare <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
3231 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) {
3232 ; CHECK-LABEL: vfmsub_vv_nxv32f16:
3233 ; CHECK:       # %bb.0:
3234 ; CHECK-NEXT:    vl8re16.v v24, (a0)
3235 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3236 ; CHECK-NEXT:    vfmsub.vv v16, v8, v24, v0.t
3237 ; CHECK-NEXT:    vmv.v.v v8, v16
3238 ; CHECK-NEXT:    ret
3239   %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)
3240   %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)
3241   ret <vscale x 32 x half> %v
3244 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) {
3245 ; CHECK-LABEL: vfmsub_vv_nxv32f16_unmasked:
3246 ; CHECK:       # %bb.0:
3247 ; CHECK-NEXT:    vl8re16.v v24, (a0)
3248 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3249 ; CHECK-NEXT:    vfmsub.vv v8, v16, v24
3250 ; CHECK-NEXT:    ret
3251   %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)
3252   %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)
3253   ret <vscale x 32 x half> %v
3256 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) {
3257 ; CHECK-LABEL: vfmsub_vf_nxv32f16:
3258 ; CHECK:       # %bb.0:
3259 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3260 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
3261 ; CHECK-NEXT:    ret
3262   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3263   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3264   %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)
3265   %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)
3266   ret <vscale x 32 x half> %v
3269 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) {
3270 ; CHECK-LABEL: vfmsub_vf_nxv32f16_commute:
3271 ; CHECK:       # %bb.0:
3272 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3273 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
3274 ; CHECK-NEXT:    ret
3275   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3276   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3277   %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)
3278   %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)
3279   ret <vscale x 32 x half> %v
3282 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) {
3283 ; CHECK-LABEL: vfmsub_vf_nxv32f16_unmasked:
3284 ; CHECK:       # %bb.0:
3285 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3286 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3292   ret <vscale x 32 x half> %v
3295 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) {
3296 ; CHECK-LABEL: vfmsub_vf_nxv32f16_unmasked_commute:
3297 ; CHECK:       # %bb.0:
3298 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3299 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3305   ret <vscale x 32 x half> %v
3308 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) {
3309 ; CHECK-LABEL: vfnmadd_vv_nxv32f16:
3310 ; CHECK:       # %bb.0:
3311 ; CHECK-NEXT:    vl8re16.v v24, (a0)
3312 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3313 ; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
3314 ; CHECK-NEXT:    vmv.v.v v8, v16
3315 ; CHECK-NEXT:    ret
3316   %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)
3317   %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)
3318   %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)
3319   ret <vscale x 32 x half> %v
3322 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) {
3323 ; CHECK-LABEL: vfnmadd_vv_nxv32f16_commuted:
3324 ; CHECK:       # %bb.0:
3325 ; CHECK-NEXT:    vl8re16.v v24, (a0)
3326 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3327 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
3328 ; CHECK-NEXT:    ret
3329   %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)
3330   %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)
3331   %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)
3332   ret <vscale x 32 x half> %v
3335 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) {
3336 ; CHECK-LABEL: vfnmadd_vv_nxv32f16_unmasked:
3337 ; CHECK:       # %bb.0:
3338 ; CHECK-NEXT:    vl8re16.v v24, (a0)
3339 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3340 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3345   ret <vscale x 32 x half> %v
3348 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) {
3349 ; CHECK-LABEL: vfnmadd_vv_nxv32f16_unmasked_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
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3358   ret <vscale x 32 x half> %v
3361 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) {
3362 ; CHECK-LABEL: vfnmadd_vf_nxv32f16:
3363 ; CHECK:       # %bb.0:
3364 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3365 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3366 ; CHECK-NEXT:    ret
3367   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3368   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3369   %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)
3370   %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)
3371   %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)
3372   ret <vscale x 32 x half> %v
3375 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) {
3376 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_commute:
3377 ; CHECK:       # %bb.0:
3378 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3379 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3380 ; CHECK-NEXT:    ret
3381   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3382   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3383   %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)
3384   %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)
3385   %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)
3386   ret <vscale x 32 x half> %v
3389 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) {
3390 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_unmasked:
3391 ; CHECK:       # %bb.0:
3392 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3393 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3394 ; CHECK-NEXT:    ret
3395   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3396   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3397   %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)
3398   %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)
3399   %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)
3400   ret <vscale x 32 x half> %v
3403 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) {
3404 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_unmasked_commute:
3405 ; CHECK:       # %bb.0:
3406 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3407 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3408 ; CHECK-NEXT:    ret
3409   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3410   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3411   %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)
3412   %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)
3413   %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)
3414   ret <vscale x 32 x half> %v
3417 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) {
3418 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat:
3419 ; CHECK:       # %bb.0:
3420 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3421 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3422 ; CHECK-NEXT:    ret
3423   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3424   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3425   %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)
3426   %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)
3427   %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)
3428   ret <vscale x 32 x half> %v
3431 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) {
3432 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_commute:
3433 ; CHECK:       # %bb.0:
3434 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3435 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3436 ; CHECK-NEXT:    ret
3437   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3438   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3439   %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)
3440   %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)
3441   %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)
3442   ret <vscale x 32 x half> %v
3445 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) {
3446 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked:
3447 ; CHECK:       # %bb.0:
3448 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3449 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3450 ; CHECK-NEXT:    ret
3451   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3452   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3453   %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)
3454   %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)
3455   %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)
3456   ret <vscale x 32 x half> %v
3459 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) {
3460 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked_commute:
3461 ; CHECK:       # %bb.0:
3462 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3463 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3464 ; CHECK-NEXT:    ret
3465   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3466   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3467   %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)
3468   %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)
3469   %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)
3470   ret <vscale x 32 x half> %v
3473 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) {
3474 ; CHECK-LABEL: vfnmsub_vv_nxv32f16:
3475 ; CHECK:       # %bb.0:
3476 ; CHECK-NEXT:    vl8re16.v v24, (a0)
3477 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3478 ; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
3479 ; CHECK-NEXT:    vmv.v.v v8, v16
3480 ; CHECK-NEXT:    ret
3481   %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)
3482   %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)
3483   %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)
3484   ret <vscale x 32 x half> %v
3487 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) {
3488 ; CHECK-LABEL: vfnmsub_vv_nxv32f16_commuted:
3489 ; CHECK:       # %bb.0:
3490 ; CHECK-NEXT:    vl8re16.v v24, (a0)
3491 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3492 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
3493 ; CHECK-NEXT:    ret
3494   %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)
3495   %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)
3496   %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)
3497   ret <vscale x 32 x half> %v
3500 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) {
3501 ; CHECK-LABEL: vfnmsub_vv_nxv32f16_unmasked:
3502 ; CHECK:       # %bb.0:
3503 ; CHECK-NEXT:    vl8re16.v v24, (a0)
3504 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3505 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3510   ret <vscale x 32 x half> %v
3513 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) {
3514 ; CHECK-LABEL: vfnmsub_vv_nxv32f16_unmasked_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
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3523   ret <vscale x 32 x half> %v
3526 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) {
3527 ; CHECK-LABEL: vfnmsub_vf_nxv32f16:
3528 ; CHECK:       # %bb.0:
3529 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3530 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3531 ; CHECK-NEXT:    ret
3532   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3533   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3534   %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)
3535   %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)
3536   ret <vscale x 32 x half> %v
3539 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) {
3540 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_commute:
3541 ; CHECK:       # %bb.0:
3542 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3543 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3544 ; CHECK-NEXT:    ret
3545   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3546   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3547   %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)
3548   %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)
3549   ret <vscale x 32 x half> %v
3552 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) {
3553 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_unmasked:
3554 ; CHECK:       # %bb.0:
3555 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3556 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3562   ret <vscale x 32 x half> %v
3565 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) {
3566 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_unmasked_commute:
3567 ; CHECK:       # %bb.0:
3568 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3569 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3575   ret <vscale x 32 x half> %v
3578 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) {
3579 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat:
3580 ; CHECK:       # %bb.0:
3581 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3582 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
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   %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)
3587   %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)
3588   ret <vscale x 32 x half> %v
3591 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) {
3592 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_commute:
3593 ; CHECK:       # %bb.0:
3594 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3595 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
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   %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)
3600   %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)
3601   ret <vscale x 32 x half> %v
3604 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) {
3605 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked:
3606 ; CHECK:       # %bb.0:
3607 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3608 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3614   ret <vscale x 32 x half> %v
3617 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) {
3618 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked_commute:
3619 ; CHECK:       # %bb.0:
3620 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3621 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3627   ret <vscale x 32 x half> %v
3630 declare <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
3632 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) {
3633 ; CHECK-LABEL: vfmsub_vv_nxv1f32:
3634 ; CHECK:       # %bb.0:
3635 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3636 ; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
3637 ; CHECK-NEXT:    vmv1r.v v8, v9
3638 ; CHECK-NEXT:    ret
3639   %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)
3640   %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)
3641   ret <vscale x 1 x float> %v
3644 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) {
3645 ; CHECK-LABEL: vfmsub_vv_nxv1f32_unmasked:
3646 ; CHECK:       # %bb.0:
3647 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3648 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
3649 ; CHECK-NEXT:    ret
3650   %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)
3651   %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)
3652   ret <vscale x 1 x float> %v
3655 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) {
3656 ; CHECK-LABEL: vfmsub_vf_nxv1f32:
3657 ; CHECK:       # %bb.0:
3658 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3659 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
3660 ; CHECK-NEXT:    ret
3661   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3662   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3663   %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)
3664   %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)
3665   ret <vscale x 1 x float> %v
3668 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) {
3669 ; CHECK-LABEL: vfmsub_vf_nxv1f32_commute:
3670 ; CHECK:       # %bb.0:
3671 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3672 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
3673 ; CHECK-NEXT:    ret
3674   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3675   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3676   %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)
3677   %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)
3678   ret <vscale x 1 x float> %v
3681 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) {
3682 ; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked:
3683 ; CHECK:       # %bb.0:
3684 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3685 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3691   ret <vscale x 1 x float> %v
3694 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) {
3695 ; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked_commute:
3696 ; CHECK:       # %bb.0:
3697 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3698 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3704   ret <vscale x 1 x float> %v
3707 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) {
3708 ; CHECK-LABEL: vfnmadd_vv_nxv1f32:
3709 ; CHECK:       # %bb.0:
3710 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3711 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
3712 ; CHECK-NEXT:    vmv1r.v v8, v9
3713 ; CHECK-NEXT:    ret
3714   %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)
3715   %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)
3716   %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)
3717   ret <vscale x 1 x float> %v
3720 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) {
3721 ; CHECK-LABEL: vfnmadd_vv_nxv1f32_commuted:
3722 ; CHECK:       # %bb.0:
3723 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3724 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
3725 ; CHECK-NEXT:    ret
3726   %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)
3727   %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)
3728   %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)
3729   ret <vscale x 1 x float> %v
3732 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) {
3733 ; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked:
3734 ; CHECK:       # %bb.0:
3735 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3736 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
3737 ; CHECK-NEXT:    ret
3738   %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)
3739   %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)
3740   %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)
3741   ret <vscale x 1 x float> %v
3744 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) {
3745 ; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked_commuted:
3746 ; CHECK:       # %bb.0:
3747 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3748 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
3749 ; CHECK-NEXT:    ret
3750   %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)
3751   %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)
3752   %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)
3753   ret <vscale x 1 x float> %v
3756 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) {
3757 ; CHECK-LABEL: vfnmadd_vf_nxv1f32:
3758 ; CHECK:       # %bb.0:
3759 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3760 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
3761 ; CHECK-NEXT:    ret
3762   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3763   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3764   %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)
3765   %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)
3766   %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)
3767   ret <vscale x 1 x float> %v
3770 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) {
3771 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_commute:
3772 ; CHECK:       # %bb.0:
3773 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3774 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
3775 ; CHECK-NEXT:    ret
3776   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3777   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3778   %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)
3779   %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)
3780   %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)
3781   ret <vscale x 1 x float> %v
3784 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) {
3785 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked:
3786 ; CHECK:       # %bb.0:
3787 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3788 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
3789 ; CHECK-NEXT:    ret
3790   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3791   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3792   %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)
3793   %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)
3794   %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)
3795   ret <vscale x 1 x float> %v
3798 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) {
3799 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked_commute:
3800 ; CHECK:       # %bb.0:
3801 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3802 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
3803 ; CHECK-NEXT:    ret
3804   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3805   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3806   %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)
3807   %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)
3808   %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)
3809   ret <vscale x 1 x float> %v
3812 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) {
3813 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat:
3814 ; CHECK:       # %bb.0:
3815 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3816 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
3817 ; CHECK-NEXT:    ret
3818   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3819   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3820   %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)
3821   %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)
3822   %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)
3823   ret <vscale x 1 x float> %v
3826 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) {
3827 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_commute:
3828 ; CHECK:       # %bb.0:
3829 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3830 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
3831 ; CHECK-NEXT:    ret
3832   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3833   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3834   %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)
3835   %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)
3836   %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)
3837   ret <vscale x 1 x float> %v
3840 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) {
3841 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked:
3842 ; CHECK:       # %bb.0:
3843 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3844 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
3845 ; CHECK-NEXT:    ret
3846   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3847   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3848   %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)
3849   %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)
3850   %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)
3851   ret <vscale x 1 x float> %v
3854 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) {
3855 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked_commute:
3856 ; CHECK:       # %bb.0:
3857 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3858 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
3859 ; CHECK-NEXT:    ret
3860   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3861   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3862   %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)
3863   %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)
3864   %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)
3865   ret <vscale x 1 x float> %v
3868 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) {
3869 ; CHECK-LABEL: vfnmsub_vv_nxv1f32:
3870 ; CHECK:       # %bb.0:
3871 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3872 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
3873 ; CHECK-NEXT:    vmv1r.v v8, v9
3874 ; CHECK-NEXT:    ret
3875   %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)
3876   %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)
3877   %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)
3878   ret <vscale x 1 x float> %v
3881 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) {
3882 ; CHECK-LABEL: vfnmsub_vv_nxv1f32_commuted:
3883 ; CHECK:       # %bb.0:
3884 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3885 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
3886 ; CHECK-NEXT:    ret
3887   %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)
3888   %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)
3889   %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)
3890   ret <vscale x 1 x float> %v
3893 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) {
3894 ; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked:
3895 ; CHECK:       # %bb.0:
3896 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3897 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
3898 ; CHECK-NEXT:    ret
3899   %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)
3900   %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)
3901   %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)
3902   ret <vscale x 1 x float> %v
3905 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) {
3906 ; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked_commuted:
3907 ; CHECK:       # %bb.0:
3908 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3909 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
3910 ; CHECK-NEXT:    ret
3911   %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)
3912   %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)
3913   %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)
3914   ret <vscale x 1 x float> %v
3917 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) {
3918 ; CHECK-LABEL: vfnmsub_vf_nxv1f32:
3919 ; CHECK:       # %bb.0:
3920 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3921 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
3922 ; CHECK-NEXT:    ret
3923   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3924   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3925   %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)
3926   %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)
3927   ret <vscale x 1 x float> %v
3930 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) {
3931 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_commute:
3932 ; CHECK:       # %bb.0:
3933 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3934 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
3935 ; CHECK-NEXT:    ret
3936   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3937   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3938   %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)
3939   %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)
3940   ret <vscale x 1 x float> %v
3943 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) {
3944 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked:
3945 ; CHECK:       # %bb.0:
3946 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3947 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3953   ret <vscale x 1 x float> %v
3956 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) {
3957 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked_commute:
3958 ; CHECK:       # %bb.0:
3959 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3960 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
3966   ret <vscale x 1 x float> %v
3969 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) {
3970 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat:
3971 ; CHECK:       # %bb.0:
3972 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3973 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
3978   %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)
3979   ret <vscale x 1 x float> %v
3982 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) {
3983 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_commute:
3984 ; CHECK:       # %bb.0:
3985 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3986 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
3991   %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)
3992   ret <vscale x 1 x float> %v
3995 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) {
3996 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked:
3997 ; CHECK:       # %bb.0:
3998 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3999 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4005   ret <vscale x 1 x float> %v
4008 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) {
4009 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked_commute:
4010 ; CHECK:       # %bb.0:
4011 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4012 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4018   ret <vscale x 1 x float> %v
4021 declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
4023 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) {
4024 ; CHECK-LABEL: vfmsub_vv_nxv2f32:
4025 ; CHECK:       # %bb.0:
4026 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4027 ; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
4028 ; CHECK-NEXT:    vmv.v.v v8, v9
4029 ; CHECK-NEXT:    ret
4030   %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)
4031   %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)
4032   ret <vscale x 2 x float> %v
4035 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) {
4036 ; CHECK-LABEL: vfmsub_vv_nxv2f32_unmasked:
4037 ; CHECK:       # %bb.0:
4038 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4039 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
4040 ; CHECK-NEXT:    ret
4041   %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)
4042   %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)
4043   ret <vscale x 2 x float> %v
4046 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) {
4047 ; CHECK-LABEL: vfmsub_vf_nxv2f32:
4048 ; CHECK:       # %bb.0:
4049 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4050 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
4051 ; CHECK-NEXT:    ret
4052   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4053   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4054   %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)
4055   %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)
4056   ret <vscale x 2 x float> %v
4059 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) {
4060 ; CHECK-LABEL: vfmsub_vf_nxv2f32_commute:
4061 ; CHECK:       # %bb.0:
4062 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4063 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
4064 ; CHECK-NEXT:    ret
4065   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4066   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4067   %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)
4068   %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)
4069   ret <vscale x 2 x float> %v
4072 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) {
4073 ; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked:
4074 ; CHECK:       # %bb.0:
4075 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4076 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4082   ret <vscale x 2 x float> %v
4085 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) {
4086 ; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked_commute:
4087 ; CHECK:       # %bb.0:
4088 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4089 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4095   ret <vscale x 2 x float> %v
4098 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) {
4099 ; CHECK-LABEL: vfnmadd_vv_nxv2f32:
4100 ; CHECK:       # %bb.0:
4101 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4102 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
4103 ; CHECK-NEXT:    vmv.v.v v8, v9
4104 ; CHECK-NEXT:    ret
4105   %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)
4106   %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)
4107   %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)
4108   ret <vscale x 2 x float> %v
4111 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) {
4112 ; CHECK-LABEL: vfnmadd_vv_nxv2f32_commuted:
4113 ; CHECK:       # %bb.0:
4114 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4115 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4116 ; CHECK-NEXT:    ret
4117   %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)
4118   %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)
4119   %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)
4120   ret <vscale x 2 x float> %v
4123 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) {
4124 ; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked:
4125 ; CHECK:       # %bb.0:
4126 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4127 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4128 ; CHECK-NEXT:    ret
4129   %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)
4130   %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)
4131   %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)
4132   ret <vscale x 2 x float> %v
4135 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) {
4136 ; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked_commuted:
4137 ; CHECK:       # %bb.0:
4138 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4139 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4140 ; CHECK-NEXT:    ret
4141   %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)
4142   %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)
4143   %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)
4144   ret <vscale x 2 x float> %v
4147 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) {
4148 ; CHECK-LABEL: vfnmadd_vf_nxv2f32:
4149 ; CHECK:       # %bb.0:
4150 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4151 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4152 ; CHECK-NEXT:    ret
4153   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4154   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4155   %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)
4156   %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)
4157   %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)
4158   ret <vscale x 2 x float> %v
4161 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) {
4162 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_commute:
4163 ; CHECK:       # %bb.0:
4164 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4165 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4166 ; CHECK-NEXT:    ret
4167   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4168   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4169   %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)
4170   %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)
4171   %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)
4172   ret <vscale x 2 x float> %v
4175 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) {
4176 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked:
4177 ; CHECK:       # %bb.0:
4178 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4179 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4180 ; CHECK-NEXT:    ret
4181   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4182   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4183   %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)
4184   %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)
4185   %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)
4186   ret <vscale x 2 x float> %v
4189 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) {
4190 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked_commute:
4191 ; CHECK:       # %bb.0:
4192 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4193 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4194 ; CHECK-NEXT:    ret
4195   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4196   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4197   %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)
4198   %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)
4199   %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)
4200   ret <vscale x 2 x float> %v
4203 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) {
4204 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat:
4205 ; CHECK:       # %bb.0:
4206 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4207 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4208 ; CHECK-NEXT:    ret
4209   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4210   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4211   %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)
4212   %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)
4213   %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)
4214   ret <vscale x 2 x float> %v
4217 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) {
4218 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_commute:
4219 ; CHECK:       # %bb.0:
4220 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4221 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4222 ; CHECK-NEXT:    ret
4223   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4224   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4225   %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)
4226   %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)
4227   %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)
4228   ret <vscale x 2 x float> %v
4231 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) {
4232 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked:
4233 ; CHECK:       # %bb.0:
4234 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4235 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4236 ; CHECK-NEXT:    ret
4237   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4238   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4239   %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)
4240   %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)
4241   %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)
4242   ret <vscale x 2 x float> %v
4245 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) {
4246 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked_commute:
4247 ; CHECK:       # %bb.0:
4248 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4249 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4250 ; CHECK-NEXT:    ret
4251   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4252   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4253   %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)
4254   %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)
4255   %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)
4256   ret <vscale x 2 x float> %v
4259 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) {
4260 ; CHECK-LABEL: vfnmsub_vv_nxv2f32:
4261 ; CHECK:       # %bb.0:
4262 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4263 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
4264 ; CHECK-NEXT:    vmv.v.v v8, v9
4265 ; CHECK-NEXT:    ret
4266   %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)
4267   %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)
4268   %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)
4269   ret <vscale x 2 x float> %v
4272 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) {
4273 ; CHECK-LABEL: vfnmsub_vv_nxv2f32_commuted:
4274 ; CHECK:       # %bb.0:
4275 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4276 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4277 ; CHECK-NEXT:    ret
4278   %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)
4279   %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)
4280   %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)
4281   ret <vscale x 2 x float> %v
4284 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) {
4285 ; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked:
4286 ; CHECK:       # %bb.0:
4287 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4288 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4289 ; CHECK-NEXT:    ret
4290   %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)
4291   %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)
4292   %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)
4293   ret <vscale x 2 x float> %v
4296 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) {
4297 ; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked_commuted:
4298 ; CHECK:       # %bb.0:
4299 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4300 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4301 ; CHECK-NEXT:    ret
4302   %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)
4303   %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)
4304   %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)
4305   ret <vscale x 2 x float> %v
4308 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) {
4309 ; CHECK-LABEL: vfnmsub_vf_nxv2f32:
4310 ; CHECK:       # %bb.0:
4311 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4312 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4313 ; CHECK-NEXT:    ret
4314   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4315   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4316   %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)
4317   %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)
4318   ret <vscale x 2 x float> %v
4321 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) {
4322 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_commute:
4323 ; CHECK:       # %bb.0:
4324 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4325 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4326 ; CHECK-NEXT:    ret
4327   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4328   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4329   %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)
4330   %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)
4331   ret <vscale x 2 x float> %v
4334 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) {
4335 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked:
4336 ; CHECK:       # %bb.0:
4337 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4338 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4344   ret <vscale x 2 x float> %v
4347 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) {
4348 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked_commute:
4349 ; CHECK:       # %bb.0:
4350 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4351 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4357   ret <vscale x 2 x float> %v
4360 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) {
4361 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat:
4362 ; CHECK:       # %bb.0:
4363 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4364 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
4369   %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)
4370   ret <vscale x 2 x float> %v
4373 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) {
4374 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_commute:
4375 ; CHECK:       # %bb.0:
4376 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4377 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
4382   %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)
4383   ret <vscale x 2 x float> %v
4386 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) {
4387 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked:
4388 ; CHECK:       # %bb.0:
4389 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4390 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4396   ret <vscale x 2 x float> %v
4399 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) {
4400 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked_commute:
4401 ; CHECK:       # %bb.0:
4402 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4403 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4409   ret <vscale x 2 x float> %v
4412 declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
4414 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) {
4415 ; CHECK-LABEL: vfmsub_vv_nxv4f32:
4416 ; CHECK:       # %bb.0:
4417 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4418 ; CHECK-NEXT:    vfmsub.vv v10, v8, v12, v0.t
4419 ; CHECK-NEXT:    vmv.v.v v8, v10
4420 ; CHECK-NEXT:    ret
4421   %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)
4422   %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)
4423   ret <vscale x 4 x float> %v
4426 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) {
4427 ; CHECK-LABEL: vfmsub_vv_nxv4f32_unmasked:
4428 ; CHECK:       # %bb.0:
4429 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4430 ; CHECK-NEXT:    vfmsub.vv v8, v10, v12
4431 ; CHECK-NEXT:    ret
4432   %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)
4433   %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)
4434   ret <vscale x 4 x float> %v
4437 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) {
4438 ; CHECK-LABEL: vfmsub_vf_nxv4f32:
4439 ; CHECK:       # %bb.0:
4440 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4441 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
4442 ; CHECK-NEXT:    ret
4443   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4444   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4445   %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)
4446   %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)
4447   ret <vscale x 4 x float> %v
4450 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) {
4451 ; CHECK-LABEL: vfmsub_vf_nxv4f32_commute:
4452 ; CHECK:       # %bb.0:
4453 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4454 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
4455 ; CHECK-NEXT:    ret
4456   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4457   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4458   %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)
4459   %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)
4460   ret <vscale x 4 x float> %v
4463 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) {
4464 ; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked:
4465 ; CHECK:       # %bb.0:
4466 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4467 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4473   ret <vscale x 4 x float> %v
4476 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) {
4477 ; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked_commute:
4478 ; CHECK:       # %bb.0:
4479 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4480 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4486   ret <vscale x 4 x float> %v
4489 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) {
4490 ; CHECK-LABEL: vfnmadd_vv_nxv4f32:
4491 ; CHECK:       # %bb.0:
4492 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4493 ; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
4494 ; CHECK-NEXT:    vmv.v.v v8, v10
4495 ; CHECK-NEXT:    ret
4496   %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)
4497   %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)
4498   %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)
4499   ret <vscale x 4 x float> %v
4502 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) {
4503 ; CHECK-LABEL: vfnmadd_vv_nxv4f32_commuted:
4504 ; CHECK:       # %bb.0:
4505 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4506 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
4507 ; CHECK-NEXT:    ret
4508   %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)
4509   %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)
4510   %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)
4511   ret <vscale x 4 x float> %v
4514 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) {
4515 ; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked:
4516 ; CHECK:       # %bb.0:
4517 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4518 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4519 ; CHECK-NEXT:    ret
4520   %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)
4521   %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)
4522   %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)
4523   ret <vscale x 4 x float> %v
4526 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) {
4527 ; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked_commuted:
4528 ; CHECK:       # %bb.0:
4529 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4530 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4531 ; CHECK-NEXT:    ret
4532   %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)
4533   %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)
4534   %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)
4535   ret <vscale x 4 x float> %v
4538 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) {
4539 ; CHECK-LABEL: vfnmadd_vf_nxv4f32:
4540 ; CHECK:       # %bb.0:
4541 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4542 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4543 ; CHECK-NEXT:    ret
4544   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4545   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4546   %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)
4547   %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)
4548   %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)
4549   ret <vscale x 4 x float> %v
4552 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) {
4553 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_commute:
4554 ; CHECK:       # %bb.0:
4555 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4556 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4557 ; CHECK-NEXT:    ret
4558   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4559   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4560   %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)
4561   %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)
4562   %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)
4563   ret <vscale x 4 x float> %v
4566 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) {
4567 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked:
4568 ; CHECK:       # %bb.0:
4569 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4570 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4571 ; CHECK-NEXT:    ret
4572   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4573   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4574   %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)
4575   %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)
4576   %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)
4577   ret <vscale x 4 x float> %v
4580 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) {
4581 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked_commute:
4582 ; CHECK:       # %bb.0:
4583 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4584 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4585 ; CHECK-NEXT:    ret
4586   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4587   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4588   %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)
4589   %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)
4590   %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)
4591   ret <vscale x 4 x float> %v
4594 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) {
4595 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat:
4596 ; CHECK:       # %bb.0:
4597 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4598 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4599 ; CHECK-NEXT:    ret
4600   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4601   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4602   %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)
4603   %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)
4604   %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)
4605   ret <vscale x 4 x float> %v
4608 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) {
4609 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_commute:
4610 ; CHECK:       # %bb.0:
4611 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4612 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4613 ; CHECK-NEXT:    ret
4614   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4615   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4616   %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)
4617   %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)
4618   %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)
4619   ret <vscale x 4 x float> %v
4622 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) {
4623 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked:
4624 ; CHECK:       # %bb.0:
4625 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4626 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4627 ; CHECK-NEXT:    ret
4628   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4629   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4630   %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)
4631   %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)
4632   %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)
4633   ret <vscale x 4 x float> %v
4636 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) {
4637 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked_commute:
4638 ; CHECK:       # %bb.0:
4639 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4640 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4641 ; CHECK-NEXT:    ret
4642   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4643   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4644   %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)
4645   %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)
4646   %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)
4647   ret <vscale x 4 x float> %v
4650 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) {
4651 ; CHECK-LABEL: vfnmsub_vv_nxv4f32:
4652 ; CHECK:       # %bb.0:
4653 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4654 ; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
4655 ; CHECK-NEXT:    vmv.v.v v8, v10
4656 ; CHECK-NEXT:    ret
4657   %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)
4658   %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)
4659   %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)
4660   ret <vscale x 4 x float> %v
4663 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) {
4664 ; CHECK-LABEL: vfnmsub_vv_nxv4f32_commuted:
4665 ; CHECK:       # %bb.0:
4666 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4667 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
4668 ; CHECK-NEXT:    ret
4669   %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)
4670   %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)
4671   %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)
4672   ret <vscale x 4 x float> %v
4675 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) {
4676 ; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked:
4677 ; CHECK:       # %bb.0:
4678 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4679 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4680 ; CHECK-NEXT:    ret
4681   %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)
4682   %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)
4683   %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)
4684   ret <vscale x 4 x float> %v
4687 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) {
4688 ; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked_commuted:
4689 ; CHECK:       # %bb.0:
4690 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4691 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4692 ; CHECK-NEXT:    ret
4693   %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)
4694   %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)
4695   %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)
4696   ret <vscale x 4 x float> %v
4699 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) {
4700 ; CHECK-LABEL: vfnmsub_vf_nxv4f32:
4701 ; CHECK:       # %bb.0:
4702 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4703 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
4704 ; CHECK-NEXT:    ret
4705   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4706   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4707   %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)
4708   %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)
4709   ret <vscale x 4 x float> %v
4712 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) {
4713 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_commute:
4714 ; CHECK:       # %bb.0:
4715 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4716 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
4717 ; CHECK-NEXT:    ret
4718   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4719   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4720   %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)
4721   %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)
4722   ret <vscale x 4 x float> %v
4725 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) {
4726 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked:
4727 ; CHECK:       # %bb.0:
4728 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4729 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4735   ret <vscale x 4 x float> %v
4738 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) {
4739 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked_commute:
4740 ; CHECK:       # %bb.0:
4741 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4742 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4748   ret <vscale x 4 x float> %v
4751 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) {
4752 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat:
4753 ; CHECK:       # %bb.0:
4754 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4755 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
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   %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)
4760   %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)
4761   ret <vscale x 4 x float> %v
4764 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) {
4765 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_commute:
4766 ; CHECK:       # %bb.0:
4767 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4768 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
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   %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)
4773   %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)
4774   ret <vscale x 4 x float> %v
4777 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) {
4778 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked:
4779 ; CHECK:       # %bb.0:
4780 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4781 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4787   ret <vscale x 4 x float> %v
4790 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) {
4791 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked_commute:
4792 ; CHECK:       # %bb.0:
4793 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4794 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4800   ret <vscale x 4 x float> %v
4803 declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
4805 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) {
4806 ; CHECK-LABEL: vfmsub_vv_nxv8f32:
4807 ; CHECK:       # %bb.0:
4808 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4809 ; CHECK-NEXT:    vfmsub.vv v12, v8, v16, v0.t
4810 ; CHECK-NEXT:    vmv.v.v v8, v12
4811 ; CHECK-NEXT:    ret
4812   %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)
4813   %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)
4814   ret <vscale x 8 x float> %v
4817 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) {
4818 ; CHECK-LABEL: vfmsub_vv_nxv8f32_unmasked:
4819 ; CHECK:       # %bb.0:
4820 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4821 ; CHECK-NEXT:    vfmsub.vv v8, v12, v16
4822 ; CHECK-NEXT:    ret
4823   %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)
4824   %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)
4825   ret <vscale x 8 x float> %v
4828 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) {
4829 ; CHECK-LABEL: vfmsub_vf_nxv8f32:
4830 ; CHECK:       # %bb.0:
4831 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4832 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
4833 ; CHECK-NEXT:    ret
4834   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4835   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4836   %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)
4837   %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)
4838   ret <vscale x 8 x float> %v
4841 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) {
4842 ; CHECK-LABEL: vfmsub_vf_nxv8f32_commute:
4843 ; CHECK:       # %bb.0:
4844 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4845 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
4846 ; CHECK-NEXT:    ret
4847   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4848   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4849   %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)
4850   %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)
4851   ret <vscale x 8 x float> %v
4854 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) {
4855 ; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked:
4856 ; CHECK:       # %bb.0:
4857 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4858 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4864   ret <vscale x 8 x float> %v
4867 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) {
4868 ; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked_commute:
4869 ; CHECK:       # %bb.0:
4870 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4871 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
4877   ret <vscale x 8 x float> %v
4880 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) {
4881 ; CHECK-LABEL: vfnmadd_vv_nxv8f32:
4882 ; CHECK:       # %bb.0:
4883 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4884 ; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
4885 ; CHECK-NEXT:    vmv.v.v v8, v12
4886 ; CHECK-NEXT:    ret
4887   %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)
4888   %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)
4889   %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)
4890   ret <vscale x 8 x float> %v
4893 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) {
4894 ; CHECK-LABEL: vfnmadd_vv_nxv8f32_commuted:
4895 ; CHECK:       # %bb.0:
4896 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4897 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
4898 ; CHECK-NEXT:    ret
4899   %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)
4900   %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)
4901   %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)
4902   ret <vscale x 8 x float> %v
4905 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) {
4906 ; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked:
4907 ; CHECK:       # %bb.0:
4908 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4909 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
4910 ; CHECK-NEXT:    ret
4911   %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)
4912   %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)
4913   %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)
4914   ret <vscale x 8 x float> %v
4917 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) {
4918 ; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked_commuted:
4919 ; CHECK:       # %bb.0:
4920 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4921 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
4922 ; CHECK-NEXT:    ret
4923   %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)
4924   %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)
4925   %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)
4926   ret <vscale x 8 x float> %v
4929 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) {
4930 ; CHECK-LABEL: vfnmadd_vf_nxv8f32:
4931 ; CHECK:       # %bb.0:
4932 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4933 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
4934 ; CHECK-NEXT:    ret
4935   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4936   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4937   %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)
4938   %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)
4939   %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)
4940   ret <vscale x 8 x float> %v
4943 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) {
4944 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_commute:
4945 ; CHECK:       # %bb.0:
4946 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4947 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
4948 ; CHECK-NEXT:    ret
4949   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4950   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4951   %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)
4952   %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)
4953   %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)
4954   ret <vscale x 8 x float> %v
4957 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) {
4958 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked:
4959 ; CHECK:       # %bb.0:
4960 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4961 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
4962 ; CHECK-NEXT:    ret
4963   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4964   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4965   %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)
4966   %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)
4967   %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)
4968   ret <vscale x 8 x float> %v
4971 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) {
4972 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked_commute:
4973 ; CHECK:       # %bb.0:
4974 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4975 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
4976 ; CHECK-NEXT:    ret
4977   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4978   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4979   %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)
4980   %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)
4981   %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)
4982   ret <vscale x 8 x float> %v
4985 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) {
4986 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat:
4987 ; CHECK:       # %bb.0:
4988 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4989 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
4990 ; CHECK-NEXT:    ret
4991   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
4992   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
4993   %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)
4994   %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)
4995   %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)
4996   ret <vscale x 8 x float> %v
4999 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) {
5000 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_commute:
5001 ; CHECK:       # %bb.0:
5002 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5003 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
5004 ; CHECK-NEXT:    ret
5005   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5006   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5007   %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)
5008   %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)
5009   %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)
5010   ret <vscale x 8 x float> %v
5013 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) {
5014 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked:
5015 ; CHECK:       # %bb.0:
5016 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5017 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5018 ; CHECK-NEXT:    ret
5019   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5020   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5021   %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)
5022   %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)
5023   %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)
5024   ret <vscale x 8 x float> %v
5027 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) {
5028 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked_commute:
5029 ; CHECK:       # %bb.0:
5030 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5031 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5032 ; CHECK-NEXT:    ret
5033   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5034   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5035   %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)
5036   %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)
5037   %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)
5038   ret <vscale x 8 x float> %v
5041 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) {
5042 ; CHECK-LABEL: vfnmsub_vv_nxv8f32:
5043 ; CHECK:       # %bb.0:
5044 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5045 ; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
5046 ; CHECK-NEXT:    vmv.v.v v8, v12
5047 ; CHECK-NEXT:    ret
5048   %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)
5049   %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)
5050   %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)
5051   ret <vscale x 8 x float> %v
5054 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) {
5055 ; CHECK-LABEL: vfnmsub_vv_nxv8f32_commuted:
5056 ; CHECK:       # %bb.0:
5057 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5058 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
5059 ; CHECK-NEXT:    ret
5060   %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)
5061   %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)
5062   %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)
5063   ret <vscale x 8 x float> %v
5066 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) {
5067 ; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked:
5068 ; CHECK:       # %bb.0:
5069 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5070 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
5071 ; CHECK-NEXT:    ret
5072   %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)
5073   %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)
5074   %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)
5075   ret <vscale x 8 x float> %v
5078 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) {
5079 ; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked_commuted:
5080 ; CHECK:       # %bb.0:
5081 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5082 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
5083 ; CHECK-NEXT:    ret
5084   %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)
5085   %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)
5086   %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)
5087   ret <vscale x 8 x float> %v
5090 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) {
5091 ; CHECK-LABEL: vfnmsub_vf_nxv8f32:
5092 ; CHECK:       # %bb.0:
5093 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5094 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5095 ; CHECK-NEXT:    ret
5096   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5097   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5098   %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)
5099   %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)
5100   ret <vscale x 8 x float> %v
5103 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) {
5104 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_commute:
5105 ; CHECK:       # %bb.0:
5106 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5107 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5108 ; CHECK-NEXT:    ret
5109   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5110   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5111   %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)
5112   %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)
5113   ret <vscale x 8 x float> %v
5116 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) {
5117 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked:
5118 ; CHECK:       # %bb.0:
5119 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5120 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5126   ret <vscale x 8 x float> %v
5129 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) {
5130 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked_commute:
5131 ; CHECK:       # %bb.0:
5132 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5133 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5139   ret <vscale x 8 x float> %v
5142 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) {
5143 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat:
5144 ; CHECK:       # %bb.0:
5145 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5146 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
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   %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)
5151   %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)
5152   ret <vscale x 8 x float> %v
5155 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) {
5156 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_commute:
5157 ; CHECK:       # %bb.0:
5158 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5159 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
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   %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)
5164   %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)
5165   ret <vscale x 8 x float> %v
5168 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) {
5169 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked:
5170 ; CHECK:       # %bb.0:
5171 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5172 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5178   ret <vscale x 8 x float> %v
5181 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) {
5182 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked_commute:
5183 ; CHECK:       # %bb.0:
5184 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5185 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5191   ret <vscale x 8 x float> %v
5194 declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
5196 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) {
5197 ; CHECK-LABEL: vfmsub_vv_nxv16f32:
5198 ; CHECK:       # %bb.0:
5199 ; CHECK-NEXT:    vl8re32.v v24, (a0)
5200 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5201 ; CHECK-NEXT:    vfmsub.vv v16, v8, v24, v0.t
5202 ; CHECK-NEXT:    vmv.v.v v8, v16
5203 ; CHECK-NEXT:    ret
5204   %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)
5205   %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)
5206   ret <vscale x 16 x float> %v
5209 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) {
5210 ; CHECK-LABEL: vfmsub_vv_nxv16f32_unmasked:
5211 ; CHECK:       # %bb.0:
5212 ; CHECK-NEXT:    vl8re32.v v24, (a0)
5213 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5214 ; CHECK-NEXT:    vfmsub.vv v8, v16, v24
5215 ; CHECK-NEXT:    ret
5216   %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)
5217   %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)
5218   ret <vscale x 16 x float> %v
5221 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) {
5222 ; CHECK-LABEL: vfmsub_vf_nxv16f32:
5223 ; CHECK:       # %bb.0:
5224 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5225 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
5226 ; CHECK-NEXT:    ret
5227   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5228   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5229   %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)
5230   %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)
5231   ret <vscale x 16 x float> %v
5234 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) {
5235 ; CHECK-LABEL: vfmsub_vf_nxv16f32_commute:
5236 ; CHECK:       # %bb.0:
5237 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5238 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
5239 ; CHECK-NEXT:    ret
5240   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5241   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5242   %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)
5243   %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)
5244   ret <vscale x 16 x float> %v
5247 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) {
5248 ; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked:
5249 ; CHECK:       # %bb.0:
5250 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5251 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5257   ret <vscale x 16 x float> %v
5260 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) {
5261 ; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked_commute:
5262 ; CHECK:       # %bb.0:
5263 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5264 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5270   ret <vscale x 16 x float> %v
5273 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) {
5274 ; CHECK-LABEL: vfnmadd_vv_nxv16f32:
5275 ; CHECK:       # %bb.0:
5276 ; CHECK-NEXT:    vl8re32.v v24, (a0)
5277 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5278 ; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
5279 ; CHECK-NEXT:    vmv.v.v v8, v16
5280 ; CHECK-NEXT:    ret
5281   %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)
5282   %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)
5283   %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)
5284   ret <vscale x 16 x float> %v
5287 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) {
5288 ; CHECK-LABEL: vfnmadd_vv_nxv16f32_commuted:
5289 ; CHECK:       # %bb.0:
5290 ; CHECK-NEXT:    vl8re32.v v24, (a0)
5291 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5292 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
5293 ; CHECK-NEXT:    ret
5294   %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)
5295   %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)
5296   %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)
5297   ret <vscale x 16 x float> %v
5300 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) {
5301 ; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked:
5302 ; CHECK:       # %bb.0:
5303 ; CHECK-NEXT:    vl8re32.v v24, (a0)
5304 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5305 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5310   ret <vscale x 16 x float> %v
5313 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) {
5314 ; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked_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
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5323   ret <vscale x 16 x float> %v
5326 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) {
5327 ; CHECK-LABEL: vfnmadd_vf_nxv16f32:
5328 ; CHECK:       # %bb.0:
5329 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5330 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5331 ; CHECK-NEXT:    ret
5332   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5333   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5334   %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)
5335   %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)
5336   %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)
5337   ret <vscale x 16 x float> %v
5340 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) {
5341 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_commute:
5342 ; CHECK:       # %bb.0:
5343 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5344 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5345 ; CHECK-NEXT:    ret
5346   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5347   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5348   %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)
5349   %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)
5350   %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)
5351   ret <vscale x 16 x float> %v
5354 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) {
5355 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked:
5356 ; CHECK:       # %bb.0:
5357 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5358 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5359 ; CHECK-NEXT:    ret
5360   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5361   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5362   %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)
5363   %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)
5364   %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)
5365   ret <vscale x 16 x float> %v
5368 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) {
5369 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked_commute:
5370 ; CHECK:       # %bb.0:
5371 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5372 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5373 ; CHECK-NEXT:    ret
5374   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5375   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5376   %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)
5377   %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)
5378   %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)
5379   ret <vscale x 16 x float> %v
5382 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) {
5383 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat:
5384 ; CHECK:       # %bb.0:
5385 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5386 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5387 ; CHECK-NEXT:    ret
5388   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5389   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5390   %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)
5391   %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)
5392   %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)
5393   ret <vscale x 16 x float> %v
5396 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) {
5397 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_commute:
5398 ; CHECK:       # %bb.0:
5399 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5400 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5401 ; CHECK-NEXT:    ret
5402   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5403   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5404   %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)
5405   %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)
5406   %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)
5407   ret <vscale x 16 x float> %v
5410 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) {
5411 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked:
5412 ; CHECK:       # %bb.0:
5413 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5414 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5415 ; CHECK-NEXT:    ret
5416   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5417   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5418   %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)
5419   %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)
5420   %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)
5421   ret <vscale x 16 x float> %v
5424 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) {
5425 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked_commute:
5426 ; CHECK:       # %bb.0:
5427 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5428 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5429 ; CHECK-NEXT:    ret
5430   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5431   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5432   %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)
5433   %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)
5434   %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)
5435   ret <vscale x 16 x float> %v
5438 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) {
5439 ; CHECK-LABEL: vfnmsub_vv_nxv16f32:
5440 ; CHECK:       # %bb.0:
5441 ; CHECK-NEXT:    vl8re32.v v24, (a0)
5442 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5443 ; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
5444 ; CHECK-NEXT:    vmv.v.v v8, v16
5445 ; CHECK-NEXT:    ret
5446   %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)
5447   %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)
5448   %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)
5449   ret <vscale x 16 x float> %v
5452 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) {
5453 ; CHECK-LABEL: vfnmsub_vv_nxv16f32_commuted:
5454 ; CHECK:       # %bb.0:
5455 ; CHECK-NEXT:    vl8re32.v v24, (a0)
5456 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5457 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
5458 ; CHECK-NEXT:    ret
5459   %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)
5460   %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)
5461   %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)
5462   ret <vscale x 16 x float> %v
5465 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) {
5466 ; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked:
5467 ; CHECK:       # %bb.0:
5468 ; CHECK-NEXT:    vl8re32.v v24, (a0)
5469 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
5470 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5475   ret <vscale x 16 x float> %v
5478 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) {
5479 ; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked_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
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5488   ret <vscale x 16 x float> %v
5491 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) {
5492 ; CHECK-LABEL: vfnmsub_vf_nxv16f32:
5493 ; CHECK:       # %bb.0:
5494 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5495 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5496 ; CHECK-NEXT:    ret
5497   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5498   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5499   %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)
5500   %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)
5501   ret <vscale x 16 x float> %v
5504 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) {
5505 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_commute:
5506 ; CHECK:       # %bb.0:
5507 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5508 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5509 ; CHECK-NEXT:    ret
5510   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5511   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5512   %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)
5513   %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)
5514   ret <vscale x 16 x float> %v
5517 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) {
5518 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked:
5519 ; CHECK:       # %bb.0:
5520 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5521 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5527   ret <vscale x 16 x float> %v
5530 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) {
5531 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked_commute:
5532 ; CHECK:       # %bb.0:
5533 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5534 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5540   ret <vscale x 16 x float> %v
5543 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) {
5544 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat:
5545 ; CHECK:       # %bb.0:
5546 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5547 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
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   %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)
5552   %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)
5553   ret <vscale x 16 x float> %v
5556 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) {
5557 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_commute:
5558 ; CHECK:       # %bb.0:
5559 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5560 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
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   %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)
5565   %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)
5566   ret <vscale x 16 x float> %v
5569 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) {
5570 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked:
5571 ; CHECK:       # %bb.0:
5572 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5573 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5579   ret <vscale x 16 x float> %v
5582 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) {
5583 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked_commute:
5584 ; CHECK:       # %bb.0:
5585 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5586 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5592   ret <vscale x 16 x float> %v
5595 declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
5597 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) {
5598 ; CHECK-LABEL: vfmsub_vv_nxv1f64:
5599 ; CHECK:       # %bb.0:
5600 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5601 ; CHECK-NEXT:    vfmsub.vv v9, v8, v10, v0.t
5602 ; CHECK-NEXT:    vmv.v.v v8, v9
5603 ; CHECK-NEXT:    ret
5604   %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)
5605   %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)
5606   ret <vscale x 1 x double> %v
5609 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) {
5610 ; CHECK-LABEL: vfmsub_vv_nxv1f64_unmasked:
5611 ; CHECK:       # %bb.0:
5612 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5613 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
5614 ; CHECK-NEXT:    ret
5615   %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)
5616   %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)
5617   ret <vscale x 1 x double> %v
5620 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) {
5621 ; CHECK-LABEL: vfmsub_vf_nxv1f64:
5622 ; CHECK:       # %bb.0:
5623 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5624 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
5625 ; CHECK-NEXT:    ret
5626   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5627   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5628   %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)
5629   %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)
5630   ret <vscale x 1 x double> %v
5633 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) {
5634 ; CHECK-LABEL: vfmsub_vf_nxv1f64_commute:
5635 ; CHECK:       # %bb.0:
5636 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5637 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
5638 ; CHECK-NEXT:    ret
5639   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5640   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5641   %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)
5642   %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)
5643   ret <vscale x 1 x double> %v
5646 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) {
5647 ; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked:
5648 ; CHECK:       # %bb.0:
5649 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5650 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5656   ret <vscale x 1 x double> %v
5659 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) {
5660 ; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked_commute:
5661 ; CHECK:       # %bb.0:
5662 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5663 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5669   ret <vscale x 1 x double> %v
5672 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) {
5673 ; CHECK-LABEL: vfnmadd_vv_nxv1f64:
5674 ; CHECK:       # %bb.0:
5675 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5676 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
5677 ; CHECK-NEXT:    vmv.v.v v8, v9
5678 ; CHECK-NEXT:    ret
5679   %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)
5680   %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)
5681   %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)
5682   ret <vscale x 1 x double> %v
5685 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) {
5686 ; CHECK-LABEL: vfnmadd_vv_nxv1f64_commuted:
5687 ; CHECK:       # %bb.0:
5688 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5689 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
5690 ; CHECK-NEXT:    ret
5691   %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)
5692   %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)
5693   %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)
5694   ret <vscale x 1 x double> %v
5697 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) {
5698 ; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked:
5699 ; CHECK:       # %bb.0:
5700 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5701 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
5702 ; CHECK-NEXT:    ret
5703   %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)
5704   %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)
5705   %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)
5706   ret <vscale x 1 x double> %v
5709 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) {
5710 ; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked_commuted:
5711 ; CHECK:       # %bb.0:
5712 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5713 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
5714 ; CHECK-NEXT:    ret
5715   %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)
5716   %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)
5717   %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)
5718   ret <vscale x 1 x double> %v
5721 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) {
5722 ; CHECK-LABEL: vfnmadd_vf_nxv1f64:
5723 ; CHECK:       # %bb.0:
5724 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5725 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5726 ; CHECK-NEXT:    ret
5727   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5728   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5729   %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)
5730   %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)
5731   %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)
5732   ret <vscale x 1 x double> %v
5735 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) {
5736 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_commute:
5737 ; CHECK:       # %bb.0:
5738 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5739 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5740 ; CHECK-NEXT:    ret
5741   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5742   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5743   %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)
5744   %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)
5745   %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)
5746   ret <vscale x 1 x double> %v
5749 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) {
5750 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked:
5751 ; CHECK:       # %bb.0:
5752 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5753 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
5754 ; CHECK-NEXT:    ret
5755   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5756   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5757   %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)
5758   %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)
5759   %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)
5760   ret <vscale x 1 x double> %v
5763 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) {
5764 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked_commute:
5765 ; CHECK:       # %bb.0:
5766 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5767 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
5768 ; CHECK-NEXT:    ret
5769   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5770   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5771   %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)
5772   %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)
5773   %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)
5774   ret <vscale x 1 x double> %v
5777 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) {
5778 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat:
5779 ; CHECK:       # %bb.0:
5780 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5781 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5782 ; CHECK-NEXT:    ret
5783   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5784   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5785   %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)
5786   %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)
5787   %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)
5788   ret <vscale x 1 x double> %v
5791 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) {
5792 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_commute:
5793 ; CHECK:       # %bb.0:
5794 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5795 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
5796 ; CHECK-NEXT:    ret
5797   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5798   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5799   %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)
5800   %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)
5801   %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)
5802   ret <vscale x 1 x double> %v
5805 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) {
5806 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked:
5807 ; CHECK:       # %bb.0:
5808 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5809 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
5810 ; CHECK-NEXT:    ret
5811   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5812   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5813   %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)
5814   %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)
5815   %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)
5816   ret <vscale x 1 x double> %v
5819 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) {
5820 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked_commute:
5821 ; CHECK:       # %bb.0:
5822 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5823 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
5824 ; CHECK-NEXT:    ret
5825   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5826   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5827   %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)
5828   %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)
5829   %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)
5830   ret <vscale x 1 x double> %v
5833 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) {
5834 ; CHECK-LABEL: vfnmsub_vv_nxv1f64:
5835 ; CHECK:       # %bb.0:
5836 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5837 ; CHECK-NEXT:    vfnmadd.vv v9, v8, v10, v0.t
5838 ; CHECK-NEXT:    vmv.v.v v8, v9
5839 ; CHECK-NEXT:    ret
5840   %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)
5841   %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)
5842   %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)
5843   ret <vscale x 1 x double> %v
5846 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) {
5847 ; CHECK-LABEL: vfnmsub_vv_nxv1f64_commuted:
5848 ; CHECK:       # %bb.0:
5849 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5850 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
5851 ; CHECK-NEXT:    ret
5852   %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)
5853   %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)
5854   %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)
5855   ret <vscale x 1 x double> %v
5858 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) {
5859 ; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked:
5860 ; CHECK:       # %bb.0:
5861 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5862 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
5863 ; CHECK-NEXT:    ret
5864   %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)
5865   %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)
5866   %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)
5867   ret <vscale x 1 x double> %v
5870 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) {
5871 ; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked_commuted:
5872 ; CHECK:       # %bb.0:
5873 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5874 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
5875 ; CHECK-NEXT:    ret
5876   %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)
5877   %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)
5878   %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)
5879   ret <vscale x 1 x double> %v
5882 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) {
5883 ; CHECK-LABEL: vfnmsub_vf_nxv1f64:
5884 ; CHECK:       # %bb.0:
5885 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5886 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5887 ; CHECK-NEXT:    ret
5888   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5889   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5890   %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)
5891   %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)
5892   ret <vscale x 1 x double> %v
5895 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) {
5896 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_commute:
5897 ; CHECK:       # %bb.0:
5898 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5899 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
5900 ; CHECK-NEXT:    ret
5901   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
5902   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
5903   %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)
5904   %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)
5905   ret <vscale x 1 x double> %v
5908 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) {
5909 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked:
5910 ; CHECK:       # %bb.0:
5911 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5912 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5918   ret <vscale x 1 x double> %v
5921 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) {
5922 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked_commute:
5923 ; CHECK:       # %bb.0:
5924 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5925 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5931   ret <vscale x 1 x double> %v
5934 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) {
5935 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat:
5936 ; CHECK:       # %bb.0:
5937 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5938 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
5943   %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)
5944   ret <vscale x 1 x double> %v
5947 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) {
5948 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_commute:
5949 ; CHECK:       # %bb.0:
5950 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5951 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
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   %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)
5956   %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)
5957   ret <vscale x 1 x double> %v
5960 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) {
5961 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked:
5962 ; CHECK:       # %bb.0:
5963 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5964 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5970   ret <vscale x 1 x double> %v
5973 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) {
5974 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked_commute:
5975 ; CHECK:       # %bb.0:
5976 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
5977 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
5983   ret <vscale x 1 x double> %v
5986 declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
5988 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) {
5989 ; CHECK-LABEL: vfmsub_vv_nxv2f64:
5990 ; CHECK:       # %bb.0:
5991 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
5992 ; CHECK-NEXT:    vfmsub.vv v10, v8, v12, v0.t
5993 ; CHECK-NEXT:    vmv.v.v v8, v10
5994 ; CHECK-NEXT:    ret
5995   %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)
5996   %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)
5997   ret <vscale x 2 x double> %v
6000 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) {
6001 ; CHECK-LABEL: vfmsub_vv_nxv2f64_unmasked:
6002 ; CHECK:       # %bb.0:
6003 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6004 ; CHECK-NEXT:    vfmsub.vv v8, v10, v12
6005 ; CHECK-NEXT:    ret
6006   %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)
6007   %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)
6008   ret <vscale x 2 x double> %v
6011 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) {
6012 ; CHECK-LABEL: vfmsub_vf_nxv2f64:
6013 ; CHECK:       # %bb.0:
6014 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6015 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
6016 ; CHECK-NEXT:    ret
6017   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6018   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6019   %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)
6020   %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)
6021   ret <vscale x 2 x double> %v
6024 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) {
6025 ; CHECK-LABEL: vfmsub_vf_nxv2f64_commute:
6026 ; CHECK:       # %bb.0:
6027 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6028 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
6029 ; CHECK-NEXT:    ret
6030   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6031   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6032   %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)
6033   %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)
6034   ret <vscale x 2 x double> %v
6037 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) {
6038 ; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked:
6039 ; CHECK:       # %bb.0:
6040 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6041 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6047   ret <vscale x 2 x double> %v
6050 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) {
6051 ; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked_commute:
6052 ; CHECK:       # %bb.0:
6053 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6054 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6060   ret <vscale x 2 x double> %v
6063 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) {
6064 ; CHECK-LABEL: vfnmadd_vv_nxv2f64:
6065 ; CHECK:       # %bb.0:
6066 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6067 ; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
6068 ; CHECK-NEXT:    vmv.v.v v8, v10
6069 ; CHECK-NEXT:    ret
6070   %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)
6071   %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)
6072   %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)
6073   ret <vscale x 2 x double> %v
6076 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) {
6077 ; CHECK-LABEL: vfnmadd_vv_nxv2f64_commuted:
6078 ; CHECK:       # %bb.0:
6079 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6080 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
6081 ; CHECK-NEXT:    ret
6082   %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)
6083   %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)
6084   %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)
6085   ret <vscale x 2 x double> %v
6088 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) {
6089 ; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked:
6090 ; CHECK:       # %bb.0:
6091 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6092 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6093 ; CHECK-NEXT:    ret
6094   %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)
6095   %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)
6096   %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)
6097   ret <vscale x 2 x double> %v
6100 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) {
6101 ; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked_commuted:
6102 ; CHECK:       # %bb.0:
6103 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6104 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6105 ; CHECK-NEXT:    ret
6106   %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)
6107   %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)
6108   %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)
6109   ret <vscale x 2 x double> %v
6112 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) {
6113 ; CHECK-LABEL: vfnmadd_vf_nxv2f64:
6114 ; CHECK:       # %bb.0:
6115 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6116 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6117 ; CHECK-NEXT:    ret
6118   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6119   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6120   %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)
6121   %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)
6122   %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)
6123   ret <vscale x 2 x double> %v
6126 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) {
6127 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_commute:
6128 ; CHECK:       # %bb.0:
6129 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6130 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6131 ; CHECK-NEXT:    ret
6132   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6133   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6134   %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)
6135   %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)
6136   %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)
6137   ret <vscale x 2 x double> %v
6140 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) {
6141 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked:
6142 ; CHECK:       # %bb.0:
6143 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6144 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6145 ; CHECK-NEXT:    ret
6146   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6147   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6148   %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)
6149   %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)
6150   %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)
6151   ret <vscale x 2 x double> %v
6154 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) {
6155 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked_commute:
6156 ; CHECK:       # %bb.0:
6157 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6158 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6159 ; CHECK-NEXT:    ret
6160   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6161   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6162   %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)
6163   %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)
6164   %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)
6165   ret <vscale x 2 x double> %v
6168 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) {
6169 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat:
6170 ; CHECK:       # %bb.0:
6171 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6172 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6173 ; CHECK-NEXT:    ret
6174   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6175   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6176   %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)
6177   %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)
6178   %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)
6179   ret <vscale x 2 x double> %v
6182 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) {
6183 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_commute:
6184 ; CHECK:       # %bb.0:
6185 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6186 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6187 ; CHECK-NEXT:    ret
6188   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6189   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6190   %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)
6191   %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)
6192   %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)
6193   ret <vscale x 2 x double> %v
6196 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) {
6197 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked:
6198 ; CHECK:       # %bb.0:
6199 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6200 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6201 ; CHECK-NEXT:    ret
6202   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6203   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6204   %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)
6205   %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)
6206   %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)
6207   ret <vscale x 2 x double> %v
6210 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) {
6211 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked_commute:
6212 ; CHECK:       # %bb.0:
6213 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6214 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6215 ; CHECK-NEXT:    ret
6216   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6217   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6218   %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)
6219   %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)
6220   %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)
6221   ret <vscale x 2 x double> %v
6224 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) {
6225 ; CHECK-LABEL: vfnmsub_vv_nxv2f64:
6226 ; CHECK:       # %bb.0:
6227 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6228 ; CHECK-NEXT:    vfnmadd.vv v10, v8, v12, v0.t
6229 ; CHECK-NEXT:    vmv.v.v v8, v10
6230 ; CHECK-NEXT:    ret
6231   %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)
6232   %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)
6233   %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)
6234   ret <vscale x 2 x double> %v
6237 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) {
6238 ; CHECK-LABEL: vfnmsub_vv_nxv2f64_commuted:
6239 ; CHECK:       # %bb.0:
6240 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6241 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
6242 ; CHECK-NEXT:    ret
6243   %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)
6244   %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)
6245   %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)
6246   ret <vscale x 2 x double> %v
6249 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) {
6250 ; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked:
6251 ; CHECK:       # %bb.0:
6252 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6253 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6254 ; CHECK-NEXT:    ret
6255   %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)
6256   %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)
6257   %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)
6258   ret <vscale x 2 x double> %v
6261 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) {
6262 ; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked_commuted:
6263 ; CHECK:       # %bb.0:
6264 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6265 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6266 ; CHECK-NEXT:    ret
6267   %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)
6268   %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)
6269   %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)
6270   ret <vscale x 2 x double> %v
6273 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) {
6274 ; CHECK-LABEL: vfnmsub_vf_nxv2f64:
6275 ; CHECK:       # %bb.0:
6276 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6277 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6278 ; CHECK-NEXT:    ret
6279   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6280   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6281   %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)
6282   %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)
6283   ret <vscale x 2 x double> %v
6286 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) {
6287 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_commute:
6288 ; CHECK:       # %bb.0:
6289 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6290 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6291 ; CHECK-NEXT:    ret
6292   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6293   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6294   %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)
6295   %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)
6296   ret <vscale x 2 x double> %v
6299 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) {
6300 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked:
6301 ; CHECK:       # %bb.0:
6302 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6303 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6309   ret <vscale x 2 x double> %v
6312 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) {
6313 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked_commute:
6314 ; CHECK:       # %bb.0:
6315 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6316 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6322   ret <vscale x 2 x double> %v
6325 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) {
6326 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat:
6327 ; CHECK:       # %bb.0:
6328 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6329 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
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   %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)
6334   %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)
6335   ret <vscale x 2 x double> %v
6338 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) {
6339 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_commute:
6340 ; CHECK:       # %bb.0:
6341 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6342 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
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   %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)
6347   %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)
6348   ret <vscale x 2 x double> %v
6351 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) {
6352 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked:
6353 ; CHECK:       # %bb.0:
6354 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6355 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6361   ret <vscale x 2 x double> %v
6364 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) {
6365 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked_commute:
6366 ; CHECK:       # %bb.0:
6367 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6368 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6374   ret <vscale x 2 x double> %v
6377 declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
6379 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) {
6380 ; CHECK-LABEL: vfmsub_vv_nxv4f64:
6381 ; CHECK:       # %bb.0:
6382 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6383 ; CHECK-NEXT:    vfmsub.vv v12, v8, v16, v0.t
6384 ; CHECK-NEXT:    vmv.v.v v8, v12
6385 ; CHECK-NEXT:    ret
6386   %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)
6387   %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)
6388   ret <vscale x 4 x double> %v
6391 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) {
6392 ; CHECK-LABEL: vfmsub_vv_nxv4f64_unmasked:
6393 ; CHECK:       # %bb.0:
6394 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6395 ; CHECK-NEXT:    vfmsub.vv v8, v12, v16
6396 ; CHECK-NEXT:    ret
6397   %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)
6398   %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)
6399   ret <vscale x 4 x double> %v
6402 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) {
6403 ; CHECK-LABEL: vfmsub_vf_nxv4f64:
6404 ; CHECK:       # %bb.0:
6405 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6406 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
6407 ; CHECK-NEXT:    ret
6408   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6409   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6410   %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)
6411   %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)
6412   ret <vscale x 4 x double> %v
6415 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) {
6416 ; CHECK-LABEL: vfmsub_vf_nxv4f64_commute:
6417 ; CHECK:       # %bb.0:
6418 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6419 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
6420 ; CHECK-NEXT:    ret
6421   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6422   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6423   %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)
6424   %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)
6425   ret <vscale x 4 x double> %v
6428 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) {
6429 ; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked:
6430 ; CHECK:       # %bb.0:
6431 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6432 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6438   ret <vscale x 4 x double> %v
6441 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) {
6442 ; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked_commute:
6443 ; CHECK:       # %bb.0:
6444 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6445 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6451   ret <vscale x 4 x double> %v
6454 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) {
6455 ; CHECK-LABEL: vfnmadd_vv_nxv4f64:
6456 ; CHECK:       # %bb.0:
6457 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6458 ; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
6459 ; CHECK-NEXT:    vmv.v.v v8, v12
6460 ; CHECK-NEXT:    ret
6461   %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)
6462   %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)
6463   %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)
6464   ret <vscale x 4 x double> %v
6467 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) {
6468 ; CHECK-LABEL: vfnmadd_vv_nxv4f64_commuted:
6469 ; CHECK:       # %bb.0:
6470 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6471 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
6472 ; CHECK-NEXT:    ret
6473   %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)
6474   %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)
6475   %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)
6476   ret <vscale x 4 x double> %v
6479 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) {
6480 ; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked:
6481 ; CHECK:       # %bb.0:
6482 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6483 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6484 ; CHECK-NEXT:    ret
6485   %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)
6486   %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)
6487   %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)
6488   ret <vscale x 4 x double> %v
6491 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) {
6492 ; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked_commuted:
6493 ; CHECK:       # %bb.0:
6494 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6495 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6496 ; CHECK-NEXT:    ret
6497   %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)
6498   %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)
6499   %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)
6500   ret <vscale x 4 x double> %v
6503 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) {
6504 ; CHECK-LABEL: vfnmadd_vf_nxv4f64:
6505 ; CHECK:       # %bb.0:
6506 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6507 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
6508 ; CHECK-NEXT:    ret
6509   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6510   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6511   %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)
6512   %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)
6513   %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)
6514   ret <vscale x 4 x double> %v
6517 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) {
6518 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_commute:
6519 ; CHECK:       # %bb.0:
6520 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6521 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
6522 ; CHECK-NEXT:    ret
6523   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6524   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6525   %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)
6526   %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)
6527   %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)
6528   ret <vscale x 4 x double> %v
6531 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) {
6532 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked:
6533 ; CHECK:       # %bb.0:
6534 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6535 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
6536 ; CHECK-NEXT:    ret
6537   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6538   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6539   %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)
6540   %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)
6541   %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)
6542   ret <vscale x 4 x double> %v
6545 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) {
6546 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked_commute:
6547 ; CHECK:       # %bb.0:
6548 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6549 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
6550 ; CHECK-NEXT:    ret
6551   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6552   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6553   %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)
6554   %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)
6555   %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)
6556   ret <vscale x 4 x double> %v
6559 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) {
6560 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat:
6561 ; CHECK:       # %bb.0:
6562 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6563 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
6564 ; CHECK-NEXT:    ret
6565   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6566   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6567   %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)
6568   %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)
6569   %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)
6570   ret <vscale x 4 x double> %v
6573 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) {
6574 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_commute:
6575 ; CHECK:       # %bb.0:
6576 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6577 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
6578 ; CHECK-NEXT:    ret
6579   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6580   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6581   %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)
6582   %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)
6583   %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)
6584   ret <vscale x 4 x double> %v
6587 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) {
6588 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked:
6589 ; CHECK:       # %bb.0:
6590 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6591 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
6592 ; CHECK-NEXT:    ret
6593   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6594   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6595   %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)
6596   %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)
6597   %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)
6598   ret <vscale x 4 x double> %v
6601 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) {
6602 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked_commute:
6603 ; CHECK:       # %bb.0:
6604 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6605 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
6606 ; CHECK-NEXT:    ret
6607   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6608   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6609   %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)
6610   %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)
6611   %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)
6612   ret <vscale x 4 x double> %v
6615 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) {
6616 ; CHECK-LABEL: vfnmsub_vv_nxv4f64:
6617 ; CHECK:       # %bb.0:
6618 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6619 ; CHECK-NEXT:    vfnmadd.vv v12, v8, v16, v0.t
6620 ; CHECK-NEXT:    vmv.v.v v8, v12
6621 ; CHECK-NEXT:    ret
6622   %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)
6623   %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)
6624   %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)
6625   ret <vscale x 4 x double> %v
6628 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) {
6629 ; CHECK-LABEL: vfnmsub_vv_nxv4f64_commuted:
6630 ; CHECK:       # %bb.0:
6631 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6632 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
6633 ; CHECK-NEXT:    ret
6634   %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)
6635   %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)
6636   %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)
6637   ret <vscale x 4 x double> %v
6640 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) {
6641 ; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked:
6642 ; CHECK:       # %bb.0:
6643 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6644 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6645 ; CHECK-NEXT:    ret
6646   %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)
6647   %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)
6648   %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)
6649   ret <vscale x 4 x double> %v
6652 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) {
6653 ; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked_commuted:
6654 ; CHECK:       # %bb.0:
6655 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6656 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6657 ; CHECK-NEXT:    ret
6658   %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)
6659   %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)
6660   %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)
6661   ret <vscale x 4 x double> %v
6664 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) {
6665 ; CHECK-LABEL: vfnmsub_vf_nxv4f64:
6666 ; CHECK:       # %bb.0:
6667 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6668 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
6669 ; CHECK-NEXT:    ret
6670   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6671   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6672   %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)
6673   %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)
6674   ret <vscale x 4 x double> %v
6677 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) {
6678 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_commute:
6679 ; CHECK:       # %bb.0:
6680 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6681 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
6682 ; CHECK-NEXT:    ret
6683   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6684   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6685   %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)
6686   %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)
6687   ret <vscale x 4 x double> %v
6690 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) {
6691 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked:
6692 ; CHECK:       # %bb.0:
6693 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6694 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6700   ret <vscale x 4 x double> %v
6703 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) {
6704 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked_commute:
6705 ; CHECK:       # %bb.0:
6706 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6707 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6713   ret <vscale x 4 x double> %v
6716 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) {
6717 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat:
6718 ; CHECK:       # %bb.0:
6719 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6720 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
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   %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)
6725   %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)
6726   ret <vscale x 4 x double> %v
6729 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) {
6730 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_commute:
6731 ; CHECK:       # %bb.0:
6732 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6733 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
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   %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)
6738   %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)
6739   ret <vscale x 4 x double> %v
6742 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) {
6743 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked:
6744 ; CHECK:       # %bb.0:
6745 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6746 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6752   ret <vscale x 4 x double> %v
6755 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) {
6756 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked_commute:
6757 ; CHECK:       # %bb.0:
6758 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6759 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6765   ret <vscale x 4 x double> %v
6768 declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
6770 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) {
6771 ; CHECK-LABEL: vfmsub_vv_nxv8f64:
6772 ; CHECK:       # %bb.0:
6773 ; CHECK-NEXT:    vl8re64.v v24, (a0)
6774 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6775 ; CHECK-NEXT:    vfmsub.vv v16, v8, v24, v0.t
6776 ; CHECK-NEXT:    vmv.v.v v8, v16
6777 ; CHECK-NEXT:    ret
6778   %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)
6779   %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)
6780   ret <vscale x 8 x double> %v
6783 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) {
6784 ; CHECK-LABEL: vfmsub_vv_nxv8f64_unmasked:
6785 ; CHECK:       # %bb.0:
6786 ; CHECK-NEXT:    vl8re64.v v24, (a0)
6787 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6788 ; CHECK-NEXT:    vfmsub.vv v8, v16, v24
6789 ; CHECK-NEXT:    ret
6790   %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)
6791   %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)
6792   ret <vscale x 8 x double> %v
6795 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) {
6796 ; CHECK-LABEL: vfmsub_vf_nxv8f64:
6797 ; CHECK:       # %bb.0:
6798 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6799 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
6800 ; CHECK-NEXT:    ret
6801   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6802   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6803   %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)
6804   %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)
6805   ret <vscale x 8 x double> %v
6808 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) {
6809 ; CHECK-LABEL: vfmsub_vf_nxv8f64_commute:
6810 ; CHECK:       # %bb.0:
6811 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6812 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
6813 ; CHECK-NEXT:    ret
6814   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6815   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6816   %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)
6817   %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)
6818   ret <vscale x 8 x double> %v
6821 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) {
6822 ; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked:
6823 ; CHECK:       # %bb.0:
6824 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6825 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6831   ret <vscale x 8 x double> %v
6834 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) {
6835 ; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked_commute:
6836 ; CHECK:       # %bb.0:
6837 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6838 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6844   ret <vscale x 8 x double> %v
6847 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) {
6848 ; CHECK-LABEL: vfnmadd_vv_nxv8f64:
6849 ; CHECK:       # %bb.0:
6850 ; CHECK-NEXT:    vl8re64.v v24, (a0)
6851 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6852 ; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
6853 ; CHECK-NEXT:    vmv.v.v v8, v16
6854 ; CHECK-NEXT:    ret
6855   %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)
6856   %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)
6857   %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)
6858   ret <vscale x 8 x double> %v
6861 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) {
6862 ; CHECK-LABEL: vfnmadd_vv_nxv8f64_commuted:
6863 ; CHECK:       # %bb.0:
6864 ; CHECK-NEXT:    vl8re64.v v24, (a0)
6865 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6866 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
6867 ; CHECK-NEXT:    ret
6868   %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)
6869   %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)
6870   %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)
6871   ret <vscale x 8 x double> %v
6874 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) {
6875 ; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked:
6876 ; CHECK:       # %bb.0:
6877 ; CHECK-NEXT:    vl8re64.v v24, (a0)
6878 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
6879 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6884   ret <vscale x 8 x double> %v
6887 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) {
6888 ; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked_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
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
6897   ret <vscale x 8 x double> %v
6900 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) {
6901 ; CHECK-LABEL: vfnmadd_vf_nxv8f64:
6902 ; CHECK:       # %bb.0:
6903 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6904 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
6905 ; CHECK-NEXT:    ret
6906   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6907   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6908   %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)
6909   %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)
6910   %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)
6911   ret <vscale x 8 x double> %v
6914 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) {
6915 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_commute:
6916 ; CHECK:       # %bb.0:
6917 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6918 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
6919 ; CHECK-NEXT:    ret
6920   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6921   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6922   %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)
6923   %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)
6924   %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)
6925   ret <vscale x 8 x double> %v
6928 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) {
6929 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked:
6930 ; CHECK:       # %bb.0:
6931 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6932 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
6933 ; CHECK-NEXT:    ret
6934   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6935   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6936   %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)
6937   %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)
6938   %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)
6939   ret <vscale x 8 x double> %v
6942 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) {
6943 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked_commute:
6944 ; CHECK:       # %bb.0:
6945 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6946 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
6947 ; CHECK-NEXT:    ret
6948   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6949   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6950   %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)
6951   %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)
6952   %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)
6953   ret <vscale x 8 x double> %v
6956 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) {
6957 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat:
6958 ; CHECK:       # %bb.0:
6959 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6960 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
6961 ; CHECK-NEXT:    ret
6962   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6963   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6964   %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)
6965   %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)
6966   %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)
6967   ret <vscale x 8 x double> %v
6970 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) {
6971 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_commute:
6972 ; CHECK:       # %bb.0:
6973 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6974 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
6975 ; CHECK-NEXT:    ret
6976   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6977   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6978   %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)
6979   %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)
6980   %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)
6981   ret <vscale x 8 x double> %v
6984 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) {
6985 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked:
6986 ; CHECK:       # %bb.0:
6987 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
6988 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
6989 ; CHECK-NEXT:    ret
6990   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
6991   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
6992   %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)
6993   %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)
6994   %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)
6995   ret <vscale x 8 x double> %v
6998 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) {
6999 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked_commute:
7000 ; CHECK:       # %bb.0:
7001 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7002 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
7003 ; CHECK-NEXT:    ret
7004   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7005   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7006   %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)
7007   %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)
7008   %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)
7009   ret <vscale x 8 x double> %v
7012 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) {
7013 ; CHECK-LABEL: vfnmsub_vv_nxv8f64:
7014 ; CHECK:       # %bb.0:
7015 ; CHECK-NEXT:    vl8re64.v v24, (a0)
7016 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
7017 ; CHECK-NEXT:    vfnmadd.vv v16, v8, v24, v0.t
7018 ; CHECK-NEXT:    vmv.v.v v8, v16
7019 ; CHECK-NEXT:    ret
7020   %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)
7021   %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)
7022   %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)
7023   ret <vscale x 8 x double> %v
7026 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) {
7027 ; CHECK-LABEL: vfnmsub_vv_nxv8f64_commuted:
7028 ; CHECK:       # %bb.0:
7029 ; CHECK-NEXT:    vl8re64.v v24, (a0)
7030 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
7031 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24, v0.t
7032 ; CHECK-NEXT:    ret
7033   %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)
7034   %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)
7035   %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)
7036   ret <vscale x 8 x double> %v
7039 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) {
7040 ; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked:
7041 ; CHECK:       # %bb.0:
7042 ; CHECK-NEXT:    vl8re64.v v24, (a0)
7043 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
7044 ; CHECK-NEXT:    vfnmadd.vv v8, v16, v24
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
7049   ret <vscale x 8 x double> %v
7052 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) {
7053 ; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked_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
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> splat (i1 true), 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> splat (i1 true), 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> splat (i1 true), i32 %evl)
7062   ret <vscale x 8 x double> %v
7065 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) {
7066 ; CHECK-LABEL: vfnmsub_vf_nxv8f64:
7067 ; CHECK:       # %bb.0:
7068 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7069 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7070 ; CHECK-NEXT:    ret
7071   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7072   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7073   %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)
7074   %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)
7075   ret <vscale x 8 x double> %v
7078 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) {
7079 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_commute:
7080 ; CHECK:       # %bb.0:
7081 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7082 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7083 ; CHECK-NEXT:    ret
7084   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7085   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7086   %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)
7087   %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)
7088   ret <vscale x 8 x double> %v
7091 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) {
7092 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked:
7093 ; CHECK:       # %bb.0:
7094 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7095 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
7101   ret <vscale x 8 x double> %v
7104 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) {
7105 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked_commute:
7106 ; CHECK:       # %bb.0:
7107 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7108 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
7114   ret <vscale x 8 x double> %v
7117 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) {
7118 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat:
7119 ; CHECK:       # %bb.0:
7120 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7121 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
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   %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)
7126   %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)
7127   ret <vscale x 8 x double> %v
7130 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) {
7131 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_commute:
7132 ; CHECK:       # %bb.0:
7133 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7134 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
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   %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)
7139   %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)
7140   ret <vscale x 8 x double> %v
7143 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) {
7144 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked:
7145 ; CHECK:       # %bb.0:
7146 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7147 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
7153   ret <vscale x 8 x double> %v
7156 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) {
7157 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked_commute:
7158 ; CHECK:       # %bb.0:
7159 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7160 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
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> splat (i1 true), 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> splat (i1 true), i32 %evl)
7166   ret <vscale x 8 x double> %v