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:
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
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:
23 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
24 ; CHECK-NEXT: vfmadd.vv v8, v9, v10
26 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
27 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
28 %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)
29 ret <vscale x 1 x half> %v
32 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) {
33 ; CHECK-LABEL: vfma_vf_nxv1f16:
35 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
36 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
38 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
39 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
40 %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)
41 ret <vscale x 1 x half> %v
44 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) {
45 ; CHECK-LABEL: vfma_vf_nxv1f16_commute:
47 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
48 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
50 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
51 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
52 %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)
53 ret <vscale x 1 x half> %v
56 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) {
57 ; CHECK-LABEL: vfma_vf_nxv1f16_unmasked:
59 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
60 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
62 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
63 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
64 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
65 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
66 %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)
67 ret <vscale x 1 x half> %v
70 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) {
71 ; CHECK-LABEL: vfma_vf_nxv1f16_unmasked_commute:
73 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
74 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
76 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
77 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
78 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
79 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
80 %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)
81 ret <vscale x 1 x half> %v
84 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)
86 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) {
87 ; CHECK-LABEL: vfma_vv_nxv2f16:
89 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
90 ; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t
91 ; CHECK-NEXT: vmv1r.v v8, v9
93 %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)
94 ret <vscale x 2 x half> %v
97 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) {
98 ; CHECK-LABEL: vfma_vv_nxv2f16_unmasked:
100 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
101 ; CHECK-NEXT: vfmadd.vv v8, v9, v10
103 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
104 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
105 %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)
106 ret <vscale x 2 x half> %v
109 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) {
110 ; CHECK-LABEL: vfma_vf_nxv2f16:
112 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
113 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
115 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
116 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
117 %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)
118 ret <vscale x 2 x half> %v
121 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) {
122 ; CHECK-LABEL: vfma_vf_nxv2f16_commute:
124 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
125 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
127 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
128 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
129 %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)
130 ret <vscale x 2 x half> %v
133 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) {
134 ; CHECK-LABEL: vfma_vf_nxv2f16_unmasked:
136 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
137 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
139 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
140 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
141 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
142 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
143 %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)
144 ret <vscale x 2 x half> %v
147 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) {
148 ; CHECK-LABEL: vfma_vf_nxv2f16_unmasked_commute:
150 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
151 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
153 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
154 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
155 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
156 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
157 %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)
158 ret <vscale x 2 x half> %v
161 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)
163 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) {
164 ; CHECK-LABEL: vfma_vv_nxv4f16:
166 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
167 ; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t
168 ; CHECK-NEXT: vmv.v.v v8, v9
170 %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)
171 ret <vscale x 4 x half> %v
174 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) {
175 ; CHECK-LABEL: vfma_vv_nxv4f16_unmasked:
177 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
178 ; CHECK-NEXT: vfmadd.vv v8, v9, v10
180 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
181 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
182 %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)
183 ret <vscale x 4 x half> %v
186 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) {
187 ; CHECK-LABEL: vfma_vf_nxv4f16:
189 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
190 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
192 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
193 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
194 %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)
195 ret <vscale x 4 x half> %v
198 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) {
199 ; CHECK-LABEL: vfma_vf_nxv4f16_commute:
201 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
202 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
204 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
205 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
206 %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)
207 ret <vscale x 4 x half> %v
210 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) {
211 ; CHECK-LABEL: vfma_vf_nxv4f16_unmasked:
213 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
214 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
216 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
217 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
218 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
219 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
220 %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)
221 ret <vscale x 4 x half> %v
224 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) {
225 ; CHECK-LABEL: vfma_vf_nxv4f16_unmasked_commute:
227 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
228 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
230 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
231 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
232 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
233 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
234 %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)
235 ret <vscale x 4 x half> %v
238 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)
240 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) {
241 ; CHECK-LABEL: vfma_vv_nxv8f16:
243 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
244 ; CHECK-NEXT: vfmadd.vv v10, v8, v12, v0.t
245 ; CHECK-NEXT: vmv.v.v v8, v10
247 %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)
248 ret <vscale x 8 x half> %v
251 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) {
252 ; CHECK-LABEL: vfma_vv_nxv8f16_unmasked:
254 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
255 ; CHECK-NEXT: vfmadd.vv v8, v10, v12
257 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
258 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
259 %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)
260 ret <vscale x 8 x half> %v
263 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) {
264 ; CHECK-LABEL: vfma_vf_nxv8f16:
266 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
267 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t
269 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
270 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
271 %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)
272 ret <vscale x 8 x half> %v
275 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) {
276 ; CHECK-LABEL: vfma_vf_nxv8f16_commute:
278 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
279 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t
281 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
282 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
283 %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)
284 ret <vscale x 8 x half> %v
287 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) {
288 ; CHECK-LABEL: vfma_vf_nxv8f16_unmasked:
290 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
291 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10
293 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
294 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
295 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
296 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
297 %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)
298 ret <vscale x 8 x half> %v
301 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) {
302 ; CHECK-LABEL: vfma_vf_nxv8f16_unmasked_commute:
304 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
305 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10
307 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
308 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
309 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
310 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
311 %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)
312 ret <vscale x 8 x half> %v
315 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)
317 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) {
318 ; CHECK-LABEL: vfma_vv_nxv16f16:
320 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
321 ; CHECK-NEXT: vfmadd.vv v12, v8, v16, v0.t
322 ; CHECK-NEXT: vmv.v.v v8, v12
324 %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)
325 ret <vscale x 16 x half> %v
328 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) {
329 ; CHECK-LABEL: vfma_vv_nxv16f16_unmasked:
331 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
332 ; CHECK-NEXT: vfmadd.vv v8, v12, v16
334 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
335 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
336 %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)
337 ret <vscale x 16 x half> %v
340 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) {
341 ; CHECK-LABEL: vfma_vf_nxv16f16:
343 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
344 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t
346 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
347 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
348 %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)
349 ret <vscale x 16 x half> %v
352 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) {
353 ; CHECK-LABEL: vfma_vf_nxv16f16_commute:
355 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
356 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t
358 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
359 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
360 %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)
361 ret <vscale x 16 x half> %v
364 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) {
365 ; CHECK-LABEL: vfma_vf_nxv16f16_unmasked:
367 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
368 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12
370 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
371 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
372 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
373 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
374 %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)
375 ret <vscale x 16 x half> %v
378 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) {
379 ; CHECK-LABEL: vfma_vf_nxv16f16_unmasked_commute:
381 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
382 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12
384 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
385 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
386 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
387 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
388 %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)
389 ret <vscale x 16 x half> %v
392 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)
394 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) {
395 ; CHECK-LABEL: vfma_vv_nxv32f16:
397 ; CHECK-NEXT: vl8re16.v v24, (a0)
398 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
399 ; CHECK-NEXT: vfmadd.vv v16, v8, v24, v0.t
400 ; CHECK-NEXT: vmv.v.v v8, v16
402 %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)
403 ret <vscale x 32 x half> %v
406 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) {
407 ; CHECK-LABEL: vfma_vv_nxv32f16_unmasked:
409 ; CHECK-NEXT: vl8re16.v v24, (a0)
410 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
411 ; CHECK-NEXT: vfmadd.vv v8, v16, v24
413 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
414 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
415 %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)
416 ret <vscale x 32 x half> %v
419 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) {
420 ; CHECK-LABEL: vfma_vf_nxv32f16:
422 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
423 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t
425 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
426 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
427 %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)
428 ret <vscale x 32 x half> %v
431 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) {
432 ; CHECK-LABEL: vfma_vf_nxv32f16_commute:
434 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
435 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t
437 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
438 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
439 %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)
440 ret <vscale x 32 x half> %v
443 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) {
444 ; CHECK-LABEL: vfma_vf_nxv32f16_unmasked:
446 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
447 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16
449 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
450 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
451 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
452 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
453 %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)
454 ret <vscale x 32 x half> %v
457 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) {
458 ; CHECK-LABEL: vfma_vf_nxv32f16_unmasked_commute:
460 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
461 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16
463 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
464 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
465 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
466 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
467 %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)
468 ret <vscale x 32 x half> %v
471 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)
473 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) {
474 ; CHECK-LABEL: vfma_vv_nxv1f32:
476 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
477 ; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t
478 ; CHECK-NEXT: vmv1r.v v8, v9
480 %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)
481 ret <vscale x 1 x float> %v
484 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) {
485 ; CHECK-LABEL: vfma_vv_nxv1f32_unmasked:
487 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
488 ; CHECK-NEXT: vfmadd.vv v8, v9, v10
490 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
491 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
492 %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)
493 ret <vscale x 1 x float> %v
496 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) {
497 ; CHECK-LABEL: vfma_vf_nxv1f32:
499 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
500 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
502 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
503 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
504 %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)
505 ret <vscale x 1 x float> %v
508 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) {
509 ; CHECK-LABEL: vfma_vf_nxv1f32_commute:
511 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
512 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
514 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
515 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
516 %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)
517 ret <vscale x 1 x float> %v
520 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) {
521 ; CHECK-LABEL: vfma_vf_nxv1f32_unmasked:
523 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
524 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
526 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
527 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
528 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
529 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
530 %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)
531 ret <vscale x 1 x float> %v
534 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) {
535 ; CHECK-LABEL: vfma_vf_nxv1f32_unmasked_commute:
537 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
538 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
540 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
541 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
542 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
543 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
544 %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)
545 ret <vscale x 1 x float> %v
548 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)
550 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) {
551 ; CHECK-LABEL: vfma_vv_nxv2f32:
553 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
554 ; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t
555 ; CHECK-NEXT: vmv.v.v v8, v9
557 %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)
558 ret <vscale x 2 x float> %v
561 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) {
562 ; CHECK-LABEL: vfma_vv_nxv2f32_unmasked:
564 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
565 ; CHECK-NEXT: vfmadd.vv v8, v9, v10
567 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
568 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
569 %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)
570 ret <vscale x 2 x float> %v
573 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) {
574 ; CHECK-LABEL: vfma_vf_nxv2f32:
576 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
577 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
579 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
580 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
581 %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)
582 ret <vscale x 2 x float> %v
585 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) {
586 ; CHECK-LABEL: vfma_vf_nxv2f32_commute:
588 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
589 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
591 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
592 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
593 %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)
594 ret <vscale x 2 x float> %v
597 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) {
598 ; CHECK-LABEL: vfma_vf_nxv2f32_unmasked:
600 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
601 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
603 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
604 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
605 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
606 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
607 %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)
608 ret <vscale x 2 x float> %v
611 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) {
612 ; CHECK-LABEL: vfma_vf_nxv2f32_unmasked_commute:
614 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
615 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
617 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
618 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
619 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
620 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
621 %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)
622 ret <vscale x 2 x float> %v
625 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)
627 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) {
628 ; CHECK-LABEL: vfma_vv_nxv4f32:
630 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
631 ; CHECK-NEXT: vfmadd.vv v10, v8, v12, v0.t
632 ; CHECK-NEXT: vmv.v.v v8, v10
634 %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)
635 ret <vscale x 4 x float> %v
638 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) {
639 ; CHECK-LABEL: vfma_vv_nxv4f32_unmasked:
641 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
642 ; CHECK-NEXT: vfmadd.vv v8, v10, v12
644 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
645 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
646 %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)
647 ret <vscale x 4 x float> %v
650 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) {
651 ; CHECK-LABEL: vfma_vf_nxv4f32:
653 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
654 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t
656 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
657 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
658 %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)
659 ret <vscale x 4 x float> %v
662 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) {
663 ; CHECK-LABEL: vfma_vf_nxv4f32_commute:
665 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
666 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t
668 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
669 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
670 %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)
671 ret <vscale x 4 x float> %v
674 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) {
675 ; CHECK-LABEL: vfma_vf_nxv4f32_unmasked:
677 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
678 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10
680 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
681 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
682 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
683 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
684 %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)
685 ret <vscale x 4 x float> %v
688 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) {
689 ; CHECK-LABEL: vfma_vf_nxv4f32_unmasked_commute:
691 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
692 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10
694 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
695 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
696 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
697 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
698 %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)
699 ret <vscale x 4 x float> %v
702 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)
704 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) {
705 ; CHECK-LABEL: vfma_vv_nxv8f32:
707 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
708 ; CHECK-NEXT: vfmadd.vv v12, v8, v16, v0.t
709 ; CHECK-NEXT: vmv.v.v v8, v12
711 %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)
712 ret <vscale x 8 x float> %v
715 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) {
716 ; CHECK-LABEL: vfma_vv_nxv8f32_unmasked:
718 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
719 ; CHECK-NEXT: vfmadd.vv v8, v12, v16
721 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
722 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
723 %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)
724 ret <vscale x 8 x float> %v
727 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) {
728 ; CHECK-LABEL: vfma_vf_nxv8f32:
730 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
731 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t
733 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
734 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
735 %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)
736 ret <vscale x 8 x float> %v
739 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) {
740 ; CHECK-LABEL: vfma_vf_nxv8f32_commute:
742 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
743 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t
745 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
746 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
747 %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)
748 ret <vscale x 8 x float> %v
751 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) {
752 ; CHECK-LABEL: vfma_vf_nxv8f32_unmasked:
754 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
755 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12
757 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
758 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
759 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
760 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
761 %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)
762 ret <vscale x 8 x float> %v
765 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) {
766 ; CHECK-LABEL: vfma_vf_nxv8f32_unmasked_commute:
768 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
769 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12
771 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
772 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
773 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
774 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
775 %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)
776 ret <vscale x 8 x float> %v
779 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)
781 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) {
782 ; CHECK-LABEL: vfma_vv_nxv16f32:
784 ; CHECK-NEXT: vl8re32.v v24, (a0)
785 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
786 ; CHECK-NEXT: vfmadd.vv v16, v8, v24, v0.t
787 ; CHECK-NEXT: vmv.v.v v8, v16
789 %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)
790 ret <vscale x 16 x float> %v
793 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) {
794 ; CHECK-LABEL: vfma_vv_nxv16f32_unmasked:
796 ; CHECK-NEXT: vl8re32.v v24, (a0)
797 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
798 ; CHECK-NEXT: vfmadd.vv v8, v16, v24
800 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
801 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
802 %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)
803 ret <vscale x 16 x float> %v
806 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) {
807 ; CHECK-LABEL: vfma_vf_nxv16f32:
809 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
810 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t
812 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
813 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
814 %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)
815 ret <vscale x 16 x float> %v
818 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) {
819 ; CHECK-LABEL: vfma_vf_nxv16f32_commute:
821 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
822 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t
824 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
825 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
826 %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)
827 ret <vscale x 16 x float> %v
830 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) {
831 ; CHECK-LABEL: vfma_vf_nxv16f32_unmasked:
833 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
834 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16
836 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
837 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
838 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
839 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
840 %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)
841 ret <vscale x 16 x float> %v
844 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) {
845 ; CHECK-LABEL: vfma_vf_nxv16f32_unmasked_commute:
847 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
848 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16
850 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
851 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
852 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
853 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
854 %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)
855 ret <vscale x 16 x float> %v
858 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)
860 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) {
861 ; CHECK-LABEL: vfma_vv_nxv1f64:
863 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
864 ; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t
865 ; CHECK-NEXT: vmv.v.v v8, v9
867 %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)
868 ret <vscale x 1 x double> %v
871 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) {
872 ; CHECK-LABEL: vfma_vv_nxv1f64_unmasked:
874 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
875 ; CHECK-NEXT: vfmadd.vv v8, v9, v10
877 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
878 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
879 %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)
880 ret <vscale x 1 x double> %v
883 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) {
884 ; CHECK-LABEL: vfma_vf_nxv1f64:
886 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
887 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
889 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
890 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
891 %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)
892 ret <vscale x 1 x double> %v
895 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) {
896 ; CHECK-LABEL: vfma_vf_nxv1f64_commute:
898 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
899 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t
901 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
902 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
903 %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)
904 ret <vscale x 1 x double> %v
907 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) {
908 ; CHECK-LABEL: vfma_vf_nxv1f64_unmasked:
910 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
911 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
913 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
914 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
915 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
916 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
917 %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)
918 ret <vscale x 1 x double> %v
921 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) {
922 ; CHECK-LABEL: vfma_vf_nxv1f64_unmasked_commute:
924 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
925 ; CHECK-NEXT: vfmadd.vf v8, fa0, v9
927 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
928 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
929 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
930 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
931 %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)
932 ret <vscale x 1 x double> %v
935 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)
937 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) {
938 ; CHECK-LABEL: vfma_vv_nxv2f64:
940 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
941 ; CHECK-NEXT: vfmadd.vv v10, v8, v12, v0.t
942 ; CHECK-NEXT: vmv.v.v v8, v10
944 %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)
945 ret <vscale x 2 x double> %v
948 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) {
949 ; CHECK-LABEL: vfma_vv_nxv2f64_unmasked:
951 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
952 ; CHECK-NEXT: vfmadd.vv v8, v10, v12
954 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
955 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
956 %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)
957 ret <vscale x 2 x double> %v
960 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) {
961 ; CHECK-LABEL: vfma_vf_nxv2f64:
963 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
964 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t
966 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
967 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
968 %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)
969 ret <vscale x 2 x double> %v
972 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) {
973 ; CHECK-LABEL: vfma_vf_nxv2f64_commute:
975 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
976 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t
978 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
979 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
980 %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)
981 ret <vscale x 2 x double> %v
984 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) {
985 ; CHECK-LABEL: vfma_vf_nxv2f64_unmasked:
987 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
988 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10
990 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
991 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
992 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
993 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
994 %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)
995 ret <vscale x 2 x double> %v
998 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) {
999 ; CHECK-LABEL: vfma_vf_nxv2f64_unmasked_commute:
1001 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1002 ; CHECK-NEXT: vfmadd.vf v8, fa0, v10
1004 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1005 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1006 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1007 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1008 %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)
1009 ret <vscale x 2 x double> %v
1012 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)
1014 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) {
1015 ; CHECK-LABEL: vfma_vv_nxv4f64:
1017 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1018 ; CHECK-NEXT: vfmadd.vv v12, v8, v16, v0.t
1019 ; CHECK-NEXT: vmv.v.v v8, v12
1021 %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)
1022 ret <vscale x 4 x double> %v
1025 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) {
1026 ; CHECK-LABEL: vfma_vv_nxv4f64_unmasked:
1028 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1029 ; CHECK-NEXT: vfmadd.vv v8, v12, v16
1031 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1032 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1033 %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)
1034 ret <vscale x 4 x double> %v
1037 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) {
1038 ; CHECK-LABEL: vfma_vf_nxv4f64:
1040 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1041 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t
1043 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1044 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1045 %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)
1046 ret <vscale x 4 x double> %v
1049 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) {
1050 ; CHECK-LABEL: vfma_vf_nxv4f64_commute:
1052 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1053 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t
1055 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1056 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1057 %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)
1058 ret <vscale x 4 x double> %v
1061 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) {
1062 ; CHECK-LABEL: vfma_vf_nxv4f64_unmasked:
1064 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1065 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12
1067 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1068 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1069 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1070 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1071 %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)
1072 ret <vscale x 4 x double> %v
1075 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) {
1076 ; CHECK-LABEL: vfma_vf_nxv4f64_unmasked_commute:
1078 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1079 ; CHECK-NEXT: vfmadd.vf v8, fa0, v12
1081 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1082 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1083 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1084 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1085 %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)
1086 ret <vscale x 4 x double> %v
1089 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)
1091 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) {
1092 ; CHECK-LABEL: vfma_vv_nxv7f64:
1094 ; CHECK-NEXT: vl8re64.v v24, (a0)
1095 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1096 ; CHECK-NEXT: vfmadd.vv v16, v8, v24, v0.t
1097 ; CHECK-NEXT: vmv.v.v v8, v16
1099 %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)
1100 ret <vscale x 7 x double> %v
1103 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) {
1104 ; CHECK-LABEL: vfma_vv_nxv7f64_unmasked:
1106 ; CHECK-NEXT: vl8re64.v v24, (a0)
1107 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1108 ; CHECK-NEXT: vfmadd.vv v8, v16, v24
1110 %head = insertelement <vscale x 7 x i1> poison, i1 true, i32 0
1111 %m = shufflevector <vscale x 7 x i1> %head, <vscale x 7 x i1> poison, <vscale x 7 x i32> zeroinitializer
1112 %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)
1113 ret <vscale x 7 x double> %v
1116 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)
1118 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) {
1119 ; CHECK-LABEL: vfma_vv_nxv8f64:
1121 ; CHECK-NEXT: vl8re64.v v24, (a0)
1122 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1123 ; CHECK-NEXT: vfmadd.vv v16, v8, v24, v0.t
1124 ; CHECK-NEXT: vmv.v.v v8, v16
1126 %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)
1127 ret <vscale x 8 x double> %v
1130 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) {
1131 ; CHECK-LABEL: vfma_vv_nxv8f64_unmasked:
1133 ; CHECK-NEXT: vl8re64.v v24, (a0)
1134 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1135 ; CHECK-NEXT: vfmadd.vv v8, v16, v24
1137 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1138 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1139 %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)
1140 ret <vscale x 8 x double> %v
1143 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) {
1144 ; CHECK-LABEL: vfma_vf_nxv8f64:
1146 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1147 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t
1149 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1150 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1151 %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)
1152 ret <vscale x 8 x double> %v
1155 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) {
1156 ; CHECK-LABEL: vfma_vf_nxv8f64_commute:
1158 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1159 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t
1161 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1162 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1163 %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)
1164 ret <vscale x 8 x double> %v
1167 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) {
1168 ; CHECK-LABEL: vfma_vf_nxv8f64_unmasked:
1170 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1171 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16
1173 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1174 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1175 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1176 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1177 %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)
1178 ret <vscale x 8 x double> %v
1181 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) {
1182 ; CHECK-LABEL: vfma_vf_nxv8f64_unmasked_commute:
1184 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1185 ; CHECK-NEXT: vfmadd.vf v8, fa0, v16
1187 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1188 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1189 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1190 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1191 %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)
1192 ret <vscale x 8 x double> %v
1195 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)
1197 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) {
1198 ; CHECK-LABEL: vfma_vv_nxv16f64:
1200 ; CHECK-NEXT: addi sp, sp, -16
1201 ; CHECK-NEXT: .cfi_def_cfa_offset 16
1202 ; CHECK-NEXT: csrr a1, vlenb
1203 ; CHECK-NEXT: li a3, 40
1204 ; CHECK-NEXT: mul a1, a1, a3
1205 ; CHECK-NEXT: sub sp, sp, a1
1206 ; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
1207 ; CHECK-NEXT: vmv1r.v v1, v0
1208 ; CHECK-NEXT: csrr a1, vlenb
1209 ; CHECK-NEXT: li a3, 24
1210 ; CHECK-NEXT: mul a1, a1, a3
1211 ; CHECK-NEXT: add a1, sp, a1
1212 ; CHECK-NEXT: addi a1, a1, 16
1213 ; CHECK-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
1214 ; CHECK-NEXT: csrr a1, vlenb
1215 ; CHECK-NEXT: slli a1, a1, 5
1216 ; CHECK-NEXT: add a1, sp, a1
1217 ; CHECK-NEXT: addi a1, a1, 16
1218 ; CHECK-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill
1219 ; CHECK-NEXT: csrr a1, vlenb
1220 ; CHECK-NEXT: vsetvli a3, zero, e8, mf4, ta, ma
1221 ; CHECK-NEXT: slli a3, a1, 3
1222 ; CHECK-NEXT: add a5, a2, a3
1223 ; CHECK-NEXT: vl8re64.v v8, (a5)
1224 ; CHECK-NEXT: csrr a5, vlenb
1225 ; CHECK-NEXT: slli a5, a5, 4
1226 ; CHECK-NEXT: add a5, sp, a5
1227 ; CHECK-NEXT: addi a5, a5, 16
1228 ; CHECK-NEXT: vs8r.v v8, (a5) # Unknown-size Folded Spill
1229 ; CHECK-NEXT: sub a5, a4, a1
1230 ; CHECK-NEXT: sltu a6, a4, a5
1231 ; CHECK-NEXT: addi a6, a6, -1
1232 ; CHECK-NEXT: and a5, a6, a5
1233 ; CHECK-NEXT: srli a6, a1, 3
1234 ; CHECK-NEXT: add a3, a0, a3
1235 ; CHECK-NEXT: vl8re64.v v8, (a3)
1236 ; CHECK-NEXT: vl8re64.v v16, (a2)
1237 ; CHECK-NEXT: csrr a2, vlenb
1238 ; CHECK-NEXT: slli a2, a2, 3
1239 ; CHECK-NEXT: add a2, sp, a2
1240 ; CHECK-NEXT: addi a2, a2, 16
1241 ; CHECK-NEXT: vs8r.v v16, (a2) # Unknown-size Folded Spill
1242 ; CHECK-NEXT: vl8re64.v v16, (a0)
1243 ; CHECK-NEXT: addi a0, sp, 16
1244 ; CHECK-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
1245 ; CHECK-NEXT: vslidedown.vx v0, v0, a6
1246 ; CHECK-NEXT: vsetvli zero, a5, e64, m8, ta, ma
1247 ; CHECK-NEXT: csrr a0, vlenb
1248 ; CHECK-NEXT: li a2, 24
1249 ; CHECK-NEXT: mul a0, a0, a2
1250 ; CHECK-NEXT: add a0, sp, a0
1251 ; CHECK-NEXT: addi a0, a0, 16
1252 ; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload
1253 ; CHECK-NEXT: csrr a0, vlenb
1254 ; CHECK-NEXT: slli a0, a0, 4
1255 ; CHECK-NEXT: add a0, sp, a0
1256 ; CHECK-NEXT: addi a0, a0, 16
1257 ; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1258 ; CHECK-NEXT: vfmadd.vv v8, v24, v16, v0.t
1259 ; CHECK-NEXT: csrr a0, vlenb
1260 ; CHECK-NEXT: li a2, 24
1261 ; CHECK-NEXT: mul a0, a0, a2
1262 ; CHECK-NEXT: add a0, sp, a0
1263 ; CHECK-NEXT: addi a0, a0, 16
1264 ; CHECK-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
1265 ; CHECK-NEXT: bltu a4, a1, .LBB92_2
1266 ; CHECK-NEXT: # %bb.1:
1267 ; CHECK-NEXT: mv a4, a1
1268 ; CHECK-NEXT: .LBB92_2:
1269 ; CHECK-NEXT: vsetvli zero, a4, e64, m8, ta, ma
1270 ; CHECK-NEXT: vmv1r.v v0, v1
1271 ; CHECK-NEXT: csrr a0, vlenb
1272 ; CHECK-NEXT: slli a0, a0, 5
1273 ; CHECK-NEXT: add a0, sp, a0
1274 ; CHECK-NEXT: addi a0, a0, 16
1275 ; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload
1276 ; CHECK-NEXT: csrr a0, vlenb
1277 ; CHECK-NEXT: slli a0, a0, 3
1278 ; CHECK-NEXT: add a0, sp, a0
1279 ; CHECK-NEXT: addi a0, a0, 16
1280 ; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
1281 ; CHECK-NEXT: addi a0, sp, 16
1282 ; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1283 ; CHECK-NEXT: vfmadd.vv v16, v24, v8, v0.t
1284 ; CHECK-NEXT: vmv.v.v v8, v16
1285 ; CHECK-NEXT: csrr a0, vlenb
1286 ; CHECK-NEXT: li a1, 24
1287 ; CHECK-NEXT: mul a0, a0, a1
1288 ; CHECK-NEXT: add a0, sp, a0
1289 ; CHECK-NEXT: addi a0, a0, 16
1290 ; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1291 ; CHECK-NEXT: csrr a0, vlenb
1292 ; CHECK-NEXT: li a1, 40
1293 ; CHECK-NEXT: mul a0, a0, a1
1294 ; CHECK-NEXT: add sp, sp, a0
1295 ; CHECK-NEXT: addi sp, sp, 16
1297 %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)
1298 ret <vscale x 16 x double> %v
1301 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) {
1302 ; CHECK-LABEL: vfma_vv_nxv16f64_unmasked:
1304 ; CHECK-NEXT: addi sp, sp, -16
1305 ; CHECK-NEXT: .cfi_def_cfa_offset 16
1306 ; CHECK-NEXT: csrr a1, vlenb
1307 ; CHECK-NEXT: li a3, 24
1308 ; CHECK-NEXT: mul a1, a1, a3
1309 ; CHECK-NEXT: sub sp, sp, a1
1310 ; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
1311 ; CHECK-NEXT: csrr a1, vlenb
1312 ; CHECK-NEXT: slli a1, a1, 3
1313 ; CHECK-NEXT: add a1, sp, a1
1314 ; CHECK-NEXT: addi a1, a1, 16
1315 ; CHECK-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
1316 ; CHECK-NEXT: csrr a1, vlenb
1317 ; CHECK-NEXT: slli a1, a1, 4
1318 ; CHECK-NEXT: add a1, sp, a1
1319 ; CHECK-NEXT: addi a1, a1, 16
1320 ; CHECK-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill
1321 ; CHECK-NEXT: csrr a1, vlenb
1322 ; CHECK-NEXT: slli a3, a1, 3
1323 ; CHECK-NEXT: add a5, a2, a3
1324 ; CHECK-NEXT: vl8re64.v v24, (a5)
1325 ; CHECK-NEXT: add a3, a0, a3
1326 ; CHECK-NEXT: vl8re64.v v16, (a3)
1327 ; CHECK-NEXT: sub a3, a4, a1
1328 ; CHECK-NEXT: sltu a5, a4, a3
1329 ; CHECK-NEXT: addi a5, a5, -1
1330 ; CHECK-NEXT: vl8re64.v v8, (a2)
1331 ; CHECK-NEXT: addi a2, sp, 16
1332 ; CHECK-NEXT: vs8r.v v8, (a2) # Unknown-size Folded Spill
1333 ; CHECK-NEXT: vl8re64.v v0, (a0)
1334 ; CHECK-NEXT: and a3, a5, a3
1335 ; CHECK-NEXT: vsetvli zero, a3, e64, m8, ta, ma
1336 ; CHECK-NEXT: csrr a0, vlenb
1337 ; CHECK-NEXT: slli a0, a0, 3
1338 ; CHECK-NEXT: add a0, sp, a0
1339 ; CHECK-NEXT: addi a0, a0, 16
1340 ; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
1341 ; CHECK-NEXT: vfmadd.vv v16, v8, v24
1342 ; CHECK-NEXT: bltu a4, a1, .LBB93_2
1343 ; CHECK-NEXT: # %bb.1:
1344 ; CHECK-NEXT: mv a4, a1
1345 ; CHECK-NEXT: .LBB93_2:
1346 ; CHECK-NEXT: vsetvli zero, a4, e64, m8, ta, ma
1347 ; CHECK-NEXT: csrr a0, vlenb
1348 ; CHECK-NEXT: slli a0, a0, 4
1349 ; CHECK-NEXT: add a0, sp, a0
1350 ; CHECK-NEXT: addi a0, a0, 16
1351 ; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload
1352 ; CHECK-NEXT: addi a0, sp, 16
1353 ; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
1354 ; CHECK-NEXT: vfmadd.vv v0, v24, v8
1355 ; CHECK-NEXT: vmv.v.v v8, v0
1356 ; CHECK-NEXT: csrr a0, vlenb
1357 ; CHECK-NEXT: li a1, 24
1358 ; CHECK-NEXT: mul a0, a0, a1
1359 ; CHECK-NEXT: add sp, sp, a0
1360 ; CHECK-NEXT: addi sp, sp, 16
1362 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
1363 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
1364 %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)
1365 ret <vscale x 16 x double> %v
1368 declare <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
1370 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) {
1371 ; CHECK-LABEL: vfmsub_vv_nxv1f16:
1373 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1374 ; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t
1375 ; CHECK-NEXT: vmv1r.v v8, v9
1377 %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)
1378 %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)
1379 ret <vscale x 1 x half> %v
1382 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) {
1383 ; CHECK-LABEL: vfmsub_vv_nxv1f16_unmasked:
1385 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1386 ; CHECK-NEXT: vfmsub.vv v8, v9, v10
1388 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1389 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1390 %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)
1391 %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)
1392 ret <vscale x 1 x half> %v
1395 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) {
1396 ; CHECK-LABEL: vfmsub_vf_nxv1f16:
1398 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1399 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
1401 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1402 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1403 %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)
1404 %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)
1405 ret <vscale x 1 x half> %v
1408 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) {
1409 ; CHECK-LABEL: vfmsub_vf_nxv1f16_commute:
1411 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1412 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
1414 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1415 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1416 %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)
1417 %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)
1418 ret <vscale x 1 x half> %v
1421 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) {
1422 ; CHECK-LABEL: vfmsub_vf_nxv1f16_unmasked:
1424 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1425 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
1427 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1428 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1429 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1430 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1431 %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)
1432 %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)
1433 ret <vscale x 1 x half> %v
1436 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) {
1437 ; CHECK-LABEL: vfmsub_vf_nxv1f16_unmasked_commute:
1439 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1440 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
1442 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1443 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1444 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1445 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1446 %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)
1447 %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)
1448 ret <vscale x 1 x half> %v
1451 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) {
1452 ; CHECK-LABEL: vfnmadd_vv_nxv1f16:
1454 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1455 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
1456 ; CHECK-NEXT: vmv1r.v v8, v9
1458 %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)
1459 %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)
1460 %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)
1461 ret <vscale x 1 x half> %v
1464 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) {
1465 ; CHECK-LABEL: vfnmadd_vv_nxv1f16_commuted:
1467 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1468 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
1470 %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)
1471 %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)
1472 %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)
1473 ret <vscale x 1 x half> %v
1476 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) {
1477 ; CHECK-LABEL: vfnmadd_vv_nxv1f16_unmasked:
1479 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1480 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
1482 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1483 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1484 %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)
1485 %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)
1486 %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)
1487 ret <vscale x 1 x half> %v
1490 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) {
1491 ; CHECK-LABEL: vfnmadd_vv_nxv1f16_unmasked_commuted:
1493 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1494 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
1496 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1497 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1498 %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)
1499 %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)
1500 %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)
1501 ret <vscale x 1 x half> %v
1504 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) {
1505 ; CHECK-LABEL: vfnmadd_vf_nxv1f16:
1507 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1508 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
1510 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1511 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1512 %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)
1513 %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)
1514 %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)
1515 ret <vscale x 1 x half> %v
1518 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) {
1519 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_commute:
1521 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1522 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
1524 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1525 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1526 %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)
1527 %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)
1528 %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)
1529 ret <vscale x 1 x half> %v
1532 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) {
1533 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_unmasked:
1535 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1536 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
1538 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1539 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1540 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1541 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1542 %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)
1543 %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)
1544 %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)
1545 ret <vscale x 1 x half> %v
1548 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) {
1549 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_unmasked_commute:
1551 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1552 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
1554 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1555 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1556 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1557 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1558 %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)
1559 %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)
1560 %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)
1561 ret <vscale x 1 x half> %v
1564 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) {
1565 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat:
1567 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1568 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
1570 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1571 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1572 %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)
1573 %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)
1574 %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)
1575 ret <vscale x 1 x half> %v
1578 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) {
1579 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_commute:
1581 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1582 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
1584 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1585 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1586 %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)
1587 %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)
1588 %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)
1589 ret <vscale x 1 x half> %v
1592 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) {
1593 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked:
1595 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1596 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
1598 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1599 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1600 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1601 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1602 %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)
1603 %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)
1604 %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)
1605 ret <vscale x 1 x half> %v
1608 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) {
1609 ; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked_commute:
1611 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1612 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
1614 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1615 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1616 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1617 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1618 %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)
1619 %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)
1620 %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)
1621 ret <vscale x 1 x half> %v
1624 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) {
1625 ; CHECK-LABEL: vfnmsub_vv_nxv1f16:
1627 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1628 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
1629 ; CHECK-NEXT: vmv1r.v v8, v9
1631 %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)
1632 %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)
1633 %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)
1634 ret <vscale x 1 x half> %v
1637 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) {
1638 ; CHECK-LABEL: vfnmsub_vv_nxv1f16_commuted:
1640 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1641 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
1643 %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)
1644 %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)
1645 %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)
1646 ret <vscale x 1 x half> %v
1649 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) {
1650 ; CHECK-LABEL: vfnmsub_vv_nxv1f16_unmasked:
1652 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1653 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
1655 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1656 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1657 %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)
1658 %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)
1659 %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)
1660 ret <vscale x 1 x half> %v
1663 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) {
1664 ; CHECK-LABEL: vfnmsub_vv_nxv1f16_unmasked_commuted:
1666 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1667 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
1669 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1670 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1671 %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)
1672 %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)
1673 %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)
1674 ret <vscale x 1 x half> %v
1677 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) {
1678 ; CHECK-LABEL: vfnmsub_vf_nxv1f16:
1680 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1681 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
1683 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1684 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1685 %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)
1686 %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)
1687 ret <vscale x 1 x half> %v
1690 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) {
1691 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_commute:
1693 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1694 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
1696 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1697 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1698 %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)
1699 %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)
1700 ret <vscale x 1 x half> %v
1703 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) {
1704 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_unmasked:
1706 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1707 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
1709 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1710 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1711 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1712 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1713 %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)
1714 %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)
1715 ret <vscale x 1 x half> %v
1718 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) {
1719 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_unmasked_commute:
1721 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1722 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
1724 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1725 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1726 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1727 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1728 %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)
1729 %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)
1730 ret <vscale x 1 x half> %v
1733 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) {
1734 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat:
1736 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1737 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
1739 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1740 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1741 %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)
1742 %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)
1743 ret <vscale x 1 x half> %v
1746 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) {
1747 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_commute:
1749 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1750 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
1752 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1753 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1754 %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)
1755 %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)
1756 ret <vscale x 1 x half> %v
1759 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) {
1760 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked:
1762 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1763 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
1765 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1766 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1767 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1768 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1769 %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)
1770 %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)
1771 ret <vscale x 1 x half> %v
1774 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) {
1775 ; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked_commute:
1777 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1778 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
1780 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1781 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1782 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1783 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1784 %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)
1785 %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)
1786 ret <vscale x 1 x half> %v
1789 declare <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
1791 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) {
1792 ; CHECK-LABEL: vfmsub_vv_nxv2f16:
1794 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1795 ; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t
1796 ; CHECK-NEXT: vmv1r.v v8, v9
1798 %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)
1799 %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)
1800 ret <vscale x 2 x half> %v
1803 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) {
1804 ; CHECK-LABEL: vfmsub_vv_nxv2f16_unmasked:
1806 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1807 ; CHECK-NEXT: vfmsub.vv v8, v9, v10
1809 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1810 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1811 %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)
1812 %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)
1813 ret <vscale x 2 x half> %v
1816 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) {
1817 ; CHECK-LABEL: vfmsub_vf_nxv2f16:
1819 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1820 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
1822 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1823 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1824 %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)
1825 %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)
1826 ret <vscale x 2 x half> %v
1829 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) {
1830 ; CHECK-LABEL: vfmsub_vf_nxv2f16_commute:
1832 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1833 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
1835 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1836 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1837 %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)
1838 %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)
1839 ret <vscale x 2 x half> %v
1842 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) {
1843 ; CHECK-LABEL: vfmsub_vf_nxv2f16_unmasked:
1845 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1846 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
1848 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1849 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1850 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1851 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1852 %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)
1853 %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)
1854 ret <vscale x 2 x half> %v
1857 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) {
1858 ; CHECK-LABEL: vfmsub_vf_nxv2f16_unmasked_commute:
1860 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1861 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
1863 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1864 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1865 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1866 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1867 %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)
1868 %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)
1869 ret <vscale x 2 x half> %v
1872 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) {
1873 ; CHECK-LABEL: vfnmadd_vv_nxv2f16:
1875 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1876 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
1877 ; CHECK-NEXT: vmv1r.v v8, v9
1879 %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)
1880 %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)
1881 %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)
1882 ret <vscale x 2 x half> %v
1885 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) {
1886 ; CHECK-LABEL: vfnmadd_vv_nxv2f16_commuted:
1888 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1889 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
1891 %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)
1892 %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)
1893 %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)
1894 ret <vscale x 2 x half> %v
1897 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) {
1898 ; CHECK-LABEL: vfnmadd_vv_nxv2f16_unmasked:
1900 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1901 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
1903 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1904 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1905 %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)
1906 %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)
1907 %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)
1908 ret <vscale x 2 x half> %v
1911 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) {
1912 ; CHECK-LABEL: vfnmadd_vv_nxv2f16_unmasked_commuted:
1914 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1915 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
1917 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1918 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1919 %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)
1920 %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)
1921 %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)
1922 ret <vscale x 2 x half> %v
1925 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) {
1926 ; CHECK-LABEL: vfnmadd_vf_nxv2f16:
1928 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1929 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
1931 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1932 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1933 %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)
1934 %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)
1935 %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)
1936 ret <vscale x 2 x half> %v
1939 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) {
1940 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_commute:
1942 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1943 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
1945 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1946 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1947 %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)
1948 %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)
1949 %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)
1950 ret <vscale x 2 x half> %v
1953 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) {
1954 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_unmasked:
1956 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1957 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
1959 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1960 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1961 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1962 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1963 %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)
1964 %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)
1965 %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)
1966 ret <vscale x 2 x half> %v
1969 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) {
1970 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_unmasked_commute:
1972 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1973 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
1975 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1976 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1977 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1978 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1979 %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)
1980 %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)
1981 %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)
1982 ret <vscale x 2 x half> %v
1985 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) {
1986 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat:
1988 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1989 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
1991 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
1992 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
1993 %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)
1994 %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)
1995 %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)
1996 ret <vscale x 2 x half> %v
1999 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) {
2000 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_commute:
2002 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2003 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
2005 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2006 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2007 %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)
2008 %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)
2009 %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)
2010 ret <vscale x 2 x half> %v
2013 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) {
2014 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked:
2016 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2017 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
2019 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2020 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2021 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
2022 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
2023 %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)
2024 %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)
2025 %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)
2026 ret <vscale x 2 x half> %v
2029 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) {
2030 ; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked_commute:
2032 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2033 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
2035 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2036 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2037 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
2038 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
2039 %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)
2040 %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)
2041 %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)
2042 ret <vscale x 2 x half> %v
2045 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) {
2046 ; CHECK-LABEL: vfnmsub_vv_nxv2f16:
2048 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2049 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
2050 ; CHECK-NEXT: vmv1r.v v8, v9
2052 %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)
2053 %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)
2054 %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)
2055 ret <vscale x 2 x half> %v
2058 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) {
2059 ; CHECK-LABEL: vfnmsub_vv_nxv2f16_commuted:
2061 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2062 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
2064 %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)
2065 %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)
2066 %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)
2067 ret <vscale x 2 x half> %v
2070 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) {
2071 ; CHECK-LABEL: vfnmsub_vv_nxv2f16_unmasked:
2073 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2074 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
2076 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
2077 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
2078 %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)
2079 %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)
2080 %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)
2081 ret <vscale x 2 x half> %v
2084 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) {
2085 ; CHECK-LABEL: vfnmsub_vv_nxv2f16_unmasked_commuted:
2087 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2088 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
2090 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
2091 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
2092 %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)
2093 %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)
2094 %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)
2095 ret <vscale x 2 x half> %v
2098 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) {
2099 ; CHECK-LABEL: vfnmsub_vf_nxv2f16:
2101 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2102 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
2104 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2105 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2106 %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)
2107 %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)
2108 ret <vscale x 2 x half> %v
2111 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) {
2112 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_commute:
2114 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2115 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
2117 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2118 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2119 %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)
2120 %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)
2121 ret <vscale x 2 x half> %v
2124 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) {
2125 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_unmasked:
2127 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2128 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
2130 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2131 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2132 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
2133 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
2134 %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)
2135 %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)
2136 ret <vscale x 2 x half> %v
2139 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) {
2140 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_unmasked_commute:
2142 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2143 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
2145 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2146 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2147 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
2148 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
2149 %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)
2150 %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)
2151 ret <vscale x 2 x half> %v
2154 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) {
2155 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat:
2157 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2158 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
2160 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2161 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2162 %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)
2163 %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)
2164 ret <vscale x 2 x half> %v
2167 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) {
2168 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_commute:
2170 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2171 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
2173 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2174 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2175 %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)
2176 %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)
2177 ret <vscale x 2 x half> %v
2180 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) {
2181 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked:
2183 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2184 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
2186 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2187 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2188 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
2189 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
2190 %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)
2191 %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)
2192 ret <vscale x 2 x half> %v
2195 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) {
2196 ; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked_commute:
2198 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2199 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
2201 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
2202 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
2203 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
2204 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
2205 %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)
2206 %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)
2207 ret <vscale x 2 x half> %v
2210 declare <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
2212 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) {
2213 ; CHECK-LABEL: vfmsub_vv_nxv4f16:
2215 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2216 ; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t
2217 ; CHECK-NEXT: vmv.v.v v8, v9
2219 %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)
2220 %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)
2221 ret <vscale x 4 x half> %v
2224 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) {
2225 ; CHECK-LABEL: vfmsub_vv_nxv4f16_unmasked:
2227 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2228 ; CHECK-NEXT: vfmsub.vv v8, v9, v10
2230 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2231 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2232 %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)
2233 %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)
2234 ret <vscale x 4 x half> %v
2237 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) {
2238 ; CHECK-LABEL: vfmsub_vf_nxv4f16:
2240 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2241 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
2243 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2244 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2245 %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)
2246 %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)
2247 ret <vscale x 4 x half> %v
2250 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) {
2251 ; CHECK-LABEL: vfmsub_vf_nxv4f16_commute:
2253 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2254 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
2256 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2257 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2258 %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)
2259 %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)
2260 ret <vscale x 4 x half> %v
2263 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) {
2264 ; CHECK-LABEL: vfmsub_vf_nxv4f16_unmasked:
2266 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2267 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
2269 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2270 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2271 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2272 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2273 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
2274 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
2275 ret <vscale x 4 x half> %v
2278 define <vscale x 4 x half> @vfmsub_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) {
2279 ; CHECK-LABEL: vfmsub_vf_nxv4f16_unmasked_commute:
2281 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2282 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
2284 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2285 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2286 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2287 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2288 %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)
2289 %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)
2290 ret <vscale x 4 x half> %v
2293 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) {
2294 ; CHECK-LABEL: vfnmadd_vv_nxv4f16:
2296 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2297 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
2298 ; CHECK-NEXT: vmv.v.v v8, v9
2300 %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)
2301 %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)
2302 %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)
2303 ret <vscale x 4 x half> %v
2306 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) {
2307 ; CHECK-LABEL: vfnmadd_vv_nxv4f16_commuted:
2309 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2310 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
2312 %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)
2313 %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)
2314 %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)
2315 ret <vscale x 4 x half> %v
2318 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) {
2319 ; CHECK-LABEL: vfnmadd_vv_nxv4f16_unmasked:
2321 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2322 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
2324 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2325 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2326 %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)
2327 %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)
2328 %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)
2329 ret <vscale x 4 x half> %v
2332 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) {
2333 ; CHECK-LABEL: vfnmadd_vv_nxv4f16_unmasked_commuted:
2335 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2336 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
2338 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2339 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2340 %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)
2341 %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)
2342 %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)
2343 ret <vscale x 4 x half> %v
2346 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) {
2347 ; CHECK-LABEL: vfnmadd_vf_nxv4f16:
2349 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2350 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
2352 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2353 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2354 %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)
2355 %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)
2356 %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)
2357 ret <vscale x 4 x half> %v
2360 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) {
2361 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_commute:
2363 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2364 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
2366 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2367 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2368 %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)
2369 %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)
2370 %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)
2371 ret <vscale x 4 x half> %v
2374 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) {
2375 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_unmasked:
2377 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2378 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
2380 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2381 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2382 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2383 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2384 %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)
2385 %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)
2386 %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)
2387 ret <vscale x 4 x half> %v
2390 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) {
2391 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_unmasked_commute:
2393 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2394 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
2396 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2397 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2398 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2399 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2400 %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)
2401 %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)
2402 %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)
2403 ret <vscale x 4 x half> %v
2406 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) {
2407 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat:
2409 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2410 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
2412 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2413 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2414 %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)
2415 %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)
2416 %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)
2417 ret <vscale x 4 x half> %v
2420 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) {
2421 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_commute:
2423 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2424 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
2426 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2427 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2428 %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)
2429 %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)
2430 %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)
2431 ret <vscale x 4 x half> %v
2434 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) {
2435 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked:
2437 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2438 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
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 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2443 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2444 %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)
2445 %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)
2446 %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)
2447 ret <vscale x 4 x half> %v
2450 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) {
2451 ; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked_commute:
2453 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2454 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
2456 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2457 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2458 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2459 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2460 %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)
2461 %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)
2462 %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)
2463 ret <vscale x 4 x half> %v
2466 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) {
2467 ; CHECK-LABEL: vfnmsub_vv_nxv4f16:
2469 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2470 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
2471 ; CHECK-NEXT: vmv.v.v v8, v9
2473 %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)
2474 %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)
2475 %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)
2476 ret <vscale x 4 x half> %v
2479 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) {
2480 ; CHECK-LABEL: vfnmsub_vv_nxv4f16_commuted:
2482 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2483 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
2485 %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)
2486 %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)
2487 %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)
2488 ret <vscale x 4 x half> %v
2491 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) {
2492 ; CHECK-LABEL: vfnmsub_vv_nxv4f16_unmasked:
2494 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2495 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
2497 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2498 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2499 %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)
2500 %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)
2501 %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)
2502 ret <vscale x 4 x half> %v
2505 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) {
2506 ; CHECK-LABEL: vfnmsub_vv_nxv4f16_unmasked_commuted:
2508 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2509 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
2511 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2512 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2513 %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)
2514 %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)
2515 %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)
2516 ret <vscale x 4 x half> %v
2519 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) {
2520 ; CHECK-LABEL: vfnmsub_vf_nxv4f16:
2522 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2523 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
2525 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2526 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2527 %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)
2528 %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)
2529 ret <vscale x 4 x half> %v
2532 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) {
2533 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_commute:
2535 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2536 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
2538 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2539 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2540 %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)
2541 %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)
2542 ret <vscale x 4 x half> %v
2545 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) {
2546 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_unmasked:
2548 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2549 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
2551 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2552 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2553 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2554 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2555 %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)
2556 %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)
2557 ret <vscale x 4 x half> %v
2560 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) {
2561 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_unmasked_commute:
2563 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2564 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
2566 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2567 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2568 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2569 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2570 %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)
2571 %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)
2572 ret <vscale x 4 x half> %v
2575 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) {
2576 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat:
2578 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2579 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
2581 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2582 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2583 %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)
2584 %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)
2585 ret <vscale x 4 x half> %v
2588 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) {
2589 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_commute:
2591 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2592 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
2594 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2595 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2596 %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)
2597 %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)
2598 ret <vscale x 4 x half> %v
2601 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) {
2602 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked:
2604 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2605 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
2607 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2608 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2609 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2610 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2611 %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)
2612 %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)
2613 ret <vscale x 4 x half> %v
2616 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) {
2617 ; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked_commute:
2619 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2620 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
2622 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2623 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2624 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
2625 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
2626 %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)
2627 %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)
2628 ret <vscale x 4 x half> %v
2631 declare <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
2633 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) {
2634 ; CHECK-LABEL: vfmsub_vv_nxv8f16:
2636 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2637 ; CHECK-NEXT: vfmsub.vv v10, v8, v12, v0.t
2638 ; CHECK-NEXT: vmv.v.v v8, v10
2640 %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)
2641 %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)
2642 ret <vscale x 8 x half> %v
2645 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) {
2646 ; CHECK-LABEL: vfmsub_vv_nxv8f16_unmasked:
2648 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2649 ; CHECK-NEXT: vfmsub.vv v8, v10, v12
2651 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2652 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2653 %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)
2654 %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)
2655 ret <vscale x 8 x half> %v
2658 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) {
2659 ; CHECK-LABEL: vfmsub_vf_nxv8f16:
2661 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2662 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t
2664 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2665 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2666 %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)
2667 %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)
2668 ret <vscale x 8 x half> %v
2671 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) {
2672 ; CHECK-LABEL: vfmsub_vf_nxv8f16_commute:
2674 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2675 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t
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 %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)
2680 %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)
2681 ret <vscale x 8 x half> %v
2684 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) {
2685 ; CHECK-LABEL: vfmsub_vf_nxv8f16_unmasked:
2687 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2688 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10
2690 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2691 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2692 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2693 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2694 %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)
2695 %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)
2696 ret <vscale x 8 x half> %v
2699 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) {
2700 ; CHECK-LABEL: vfmsub_vf_nxv8f16_unmasked_commute:
2702 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2703 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10
2705 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2706 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2707 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2708 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2709 %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)
2710 %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)
2711 ret <vscale x 8 x half> %v
2714 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) {
2715 ; CHECK-LABEL: vfnmadd_vv_nxv8f16:
2717 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2718 ; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t
2719 ; CHECK-NEXT: vmv.v.v v8, v10
2721 %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)
2722 %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)
2723 %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)
2724 ret <vscale x 8 x half> %v
2727 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) {
2728 ; CHECK-LABEL: vfnmadd_vv_nxv8f16_commuted:
2730 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2731 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t
2733 %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)
2734 %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)
2735 %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)
2736 ret <vscale x 8 x half> %v
2739 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) {
2740 ; CHECK-LABEL: vfnmadd_vv_nxv8f16_unmasked:
2742 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2743 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
2745 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2746 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2747 %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)
2748 %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)
2749 %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)
2750 ret <vscale x 8 x half> %v
2753 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) {
2754 ; CHECK-LABEL: vfnmadd_vv_nxv8f16_unmasked_commuted:
2756 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2757 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
2759 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2760 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2761 %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)
2762 %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)
2763 %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)
2764 ret <vscale x 8 x half> %v
2767 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) {
2768 ; CHECK-LABEL: vfnmadd_vf_nxv8f16:
2770 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2771 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
2773 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2774 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2775 %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)
2776 %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)
2777 %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)
2778 ret <vscale x 8 x half> %v
2781 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) {
2782 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_commute:
2784 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2785 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
2787 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2788 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2789 %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)
2790 %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)
2791 %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)
2792 ret <vscale x 8 x half> %v
2795 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) {
2796 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_unmasked:
2798 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2799 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
2801 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2802 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2803 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2804 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2805 %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)
2806 %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)
2807 %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)
2808 ret <vscale x 8 x half> %v
2811 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) {
2812 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_unmasked_commute:
2814 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2815 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
2817 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2818 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2819 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2820 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2821 %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)
2822 %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)
2823 %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)
2824 ret <vscale x 8 x half> %v
2827 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) {
2828 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat:
2830 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2831 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
2833 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2834 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2835 %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)
2836 %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)
2837 %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)
2838 ret <vscale x 8 x half> %v
2841 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) {
2842 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_commute:
2844 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2845 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
2847 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2848 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2849 %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)
2850 %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)
2851 %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)
2852 ret <vscale x 8 x half> %v
2855 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) {
2856 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked:
2858 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2859 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
2861 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2862 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2863 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2864 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2865 %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)
2866 %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)
2867 %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)
2868 ret <vscale x 8 x half> %v
2871 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) {
2872 ; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked_commute:
2874 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2875 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
2877 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2878 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2879 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2880 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2881 %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)
2882 %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)
2883 %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)
2884 ret <vscale x 8 x half> %v
2887 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) {
2888 ; CHECK-LABEL: vfnmsub_vv_nxv8f16:
2890 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2891 ; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t
2892 ; CHECK-NEXT: vmv.v.v v8, v10
2894 %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)
2895 %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)
2896 %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)
2897 ret <vscale x 8 x half> %v
2900 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) {
2901 ; CHECK-LABEL: vfnmsub_vv_nxv8f16_commuted:
2903 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2904 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t
2906 %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)
2907 %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)
2908 %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)
2909 ret <vscale x 8 x half> %v
2912 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) {
2913 ; CHECK-LABEL: vfnmsub_vv_nxv8f16_unmasked:
2915 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2916 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
2918 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2919 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2920 %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)
2921 %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)
2922 %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)
2923 ret <vscale x 8 x half> %v
2926 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) {
2927 ; CHECK-LABEL: vfnmsub_vv_nxv8f16_unmasked_commuted:
2929 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2930 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
2932 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2933 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2934 %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)
2935 %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)
2936 %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)
2937 ret <vscale x 8 x half> %v
2940 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) {
2941 ; CHECK-LABEL: vfnmsub_vf_nxv8f16:
2943 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2944 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
2946 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2947 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2948 %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)
2949 %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)
2950 ret <vscale x 8 x half> %v
2953 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) {
2954 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_commute:
2956 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2957 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
2959 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2960 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2961 %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)
2962 %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)
2963 ret <vscale x 8 x half> %v
2966 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) {
2967 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_unmasked:
2969 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2970 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
2972 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2973 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2974 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2975 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2976 %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)
2977 %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)
2978 ret <vscale x 8 x half> %v
2981 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) {
2982 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_unmasked_commute:
2984 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2985 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
2987 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2988 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2989 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
2990 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
2991 %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)
2992 %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)
2993 ret <vscale x 8 x half> %v
2996 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) {
2997 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat:
2999 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3000 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
3002 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
3003 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
3004 %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)
3005 %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)
3006 ret <vscale x 8 x half> %v
3009 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) {
3010 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_commute:
3012 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3013 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
3015 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
3016 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
3017 %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)
3018 %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)
3019 ret <vscale x 8 x half> %v
3022 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) {
3023 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked:
3025 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3026 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
3028 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
3029 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
3030 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
3031 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
3032 %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)
3033 %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)
3034 ret <vscale x 8 x half> %v
3037 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) {
3038 ; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked_commute:
3040 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3041 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
3043 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
3044 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
3045 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
3046 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
3047 %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)
3048 %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)
3049 ret <vscale x 8 x half> %v
3052 declare <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
3054 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) {
3055 ; CHECK-LABEL: vfmsub_vv_nxv16f16:
3057 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3058 ; CHECK-NEXT: vfmsub.vv v12, v8, v16, v0.t
3059 ; CHECK-NEXT: vmv.v.v v8, v12
3061 %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)
3062 %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)
3063 ret <vscale x 16 x half> %v
3066 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) {
3067 ; CHECK-LABEL: vfmsub_vv_nxv16f16_unmasked:
3069 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3070 ; CHECK-NEXT: vfmsub.vv v8, v12, v16
3072 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3073 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3074 %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)
3075 %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)
3076 ret <vscale x 16 x half> %v
3079 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) {
3080 ; CHECK-LABEL: vfmsub_vf_nxv16f16:
3082 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3083 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t
3085 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3086 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3087 %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)
3088 %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)
3089 ret <vscale x 16 x half> %v
3092 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) {
3093 ; CHECK-LABEL: vfmsub_vf_nxv16f16_commute:
3095 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3096 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t
3098 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3099 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3100 %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)
3101 %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)
3102 ret <vscale x 16 x half> %v
3105 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) {
3106 ; CHECK-LABEL: vfmsub_vf_nxv16f16_unmasked:
3108 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3109 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12
3111 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3112 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3113 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3114 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3115 %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)
3116 %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)
3117 ret <vscale x 16 x half> %v
3120 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) {
3121 ; CHECK-LABEL: vfmsub_vf_nxv16f16_unmasked_commute:
3123 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3124 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12
3126 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3127 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3128 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3129 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3130 %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)
3131 %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)
3132 ret <vscale x 16 x half> %v
3135 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) {
3136 ; CHECK-LABEL: vfnmadd_vv_nxv16f16:
3138 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3139 ; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t
3140 ; CHECK-NEXT: vmv.v.v v8, v12
3142 %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)
3143 %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)
3144 %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)
3145 ret <vscale x 16 x half> %v
3148 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) {
3149 ; CHECK-LABEL: vfnmadd_vv_nxv16f16_commuted:
3151 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3152 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t
3154 %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)
3155 %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)
3156 %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)
3157 ret <vscale x 16 x half> %v
3160 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) {
3161 ; CHECK-LABEL: vfnmadd_vv_nxv16f16_unmasked:
3163 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3164 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
3166 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3167 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3168 %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)
3169 %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)
3170 %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)
3171 ret <vscale x 16 x half> %v
3174 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) {
3175 ; CHECK-LABEL: vfnmadd_vv_nxv16f16_unmasked_commuted:
3177 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3178 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
3180 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3181 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3182 %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)
3183 %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)
3184 %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)
3185 ret <vscale x 16 x half> %v
3188 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) {
3189 ; CHECK-LABEL: vfnmadd_vf_nxv16f16:
3191 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3192 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
3194 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3195 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3196 %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)
3197 %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)
3198 %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)
3199 ret <vscale x 16 x half> %v
3202 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) {
3203 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_commute:
3205 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3206 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
3208 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3209 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3210 %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)
3211 %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)
3212 %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)
3213 ret <vscale x 16 x half> %v
3216 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) {
3217 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_unmasked:
3219 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3220 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
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 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3225 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3226 %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)
3227 %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)
3228 %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)
3229 ret <vscale x 16 x half> %v
3232 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) {
3233 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_unmasked_commute:
3235 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3236 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
3238 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3239 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3240 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3241 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3242 %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)
3243 %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)
3244 %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)
3245 ret <vscale x 16 x half> %v
3248 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) {
3249 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat:
3251 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3252 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
3254 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3255 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3256 %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)
3257 %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)
3258 %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)
3259 ret <vscale x 16 x half> %v
3262 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) {
3263 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_commute:
3265 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3266 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
3268 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3269 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3270 %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)
3271 %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)
3272 %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)
3273 ret <vscale x 16 x half> %v
3276 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) {
3277 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked:
3279 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3280 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
3282 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3283 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3284 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3285 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3286 %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)
3287 %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)
3288 %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)
3289 ret <vscale x 16 x half> %v
3292 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) {
3293 ; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked_commute:
3295 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3296 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
3298 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3299 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3300 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3301 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3302 %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)
3303 %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)
3304 %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)
3305 ret <vscale x 16 x half> %v
3308 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) {
3309 ; CHECK-LABEL: vfnmsub_vv_nxv16f16:
3311 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3312 ; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t
3313 ; CHECK-NEXT: vmv.v.v v8, v12
3315 %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)
3316 %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)
3317 %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)
3318 ret <vscale x 16 x half> %v
3321 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) {
3322 ; CHECK-LABEL: vfnmsub_vv_nxv16f16_commuted:
3324 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3325 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t
3327 %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)
3328 %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)
3329 %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)
3330 ret <vscale x 16 x half> %v
3333 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) {
3334 ; CHECK-LABEL: vfnmsub_vv_nxv16f16_unmasked:
3336 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3337 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
3339 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3340 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3341 %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)
3342 %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)
3343 %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)
3344 ret <vscale x 16 x half> %v
3347 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) {
3348 ; CHECK-LABEL: vfnmsub_vv_nxv16f16_unmasked_commuted:
3350 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3351 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
3353 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3354 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3355 %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)
3356 %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)
3357 %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)
3358 ret <vscale x 16 x half> %v
3361 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) {
3362 ; CHECK-LABEL: vfnmsub_vf_nxv16f16:
3364 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3365 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
3367 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3368 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3369 %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)
3370 %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)
3371 ret <vscale x 16 x half> %v
3374 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) {
3375 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_commute:
3377 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3378 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
3380 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3381 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3382 %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)
3383 %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)
3384 ret <vscale x 16 x half> %v
3387 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) {
3388 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_unmasked:
3390 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3391 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
3393 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3394 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3395 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3396 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3397 %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)
3398 %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)
3399 ret <vscale x 16 x half> %v
3402 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) {
3403 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_unmasked_commute:
3405 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3406 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
3408 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3409 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3410 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3411 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3412 %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)
3413 %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)
3414 ret <vscale x 16 x half> %v
3417 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) {
3418 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat:
3420 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3421 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
3423 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3424 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3425 %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)
3426 %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)
3427 ret <vscale x 16 x half> %v
3430 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) {
3431 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_commute:
3433 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3434 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
3436 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3437 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3438 %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)
3439 %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)
3440 ret <vscale x 16 x half> %v
3443 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) {
3444 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked:
3446 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3447 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
3449 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3450 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3451 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3452 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3453 %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)
3454 %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)
3455 ret <vscale x 16 x half> %v
3458 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) {
3459 ; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked_commute:
3461 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
3462 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
3464 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3465 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3466 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
3467 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
3468 %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)
3469 %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)
3470 ret <vscale x 16 x half> %v
3473 declare <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
3475 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) {
3476 ; CHECK-LABEL: vfmsub_vv_nxv32f16:
3478 ; CHECK-NEXT: vl8re16.v v24, (a0)
3479 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3480 ; CHECK-NEXT: vfmsub.vv v16, v8, v24, v0.t
3481 ; CHECK-NEXT: vmv.v.v v8, v16
3483 %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)
3484 %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)
3485 ret <vscale x 32 x half> %v
3488 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) {
3489 ; CHECK-LABEL: vfmsub_vv_nxv32f16_unmasked:
3491 ; CHECK-NEXT: vl8re16.v v24, (a0)
3492 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3493 ; CHECK-NEXT: vfmsub.vv v8, v16, v24
3495 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3496 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3497 %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)
3498 %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)
3499 ret <vscale x 32 x half> %v
3502 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) {
3503 ; CHECK-LABEL: vfmsub_vf_nxv32f16:
3505 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3506 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t
3508 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3509 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3510 %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)
3511 %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)
3512 ret <vscale x 32 x half> %v
3515 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) {
3516 ; CHECK-LABEL: vfmsub_vf_nxv32f16_commute:
3518 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3519 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t
3521 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3522 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3523 %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)
3524 %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)
3525 ret <vscale x 32 x half> %v
3528 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) {
3529 ; CHECK-LABEL: vfmsub_vf_nxv32f16_unmasked:
3531 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3532 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16
3534 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3535 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3536 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3537 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3538 %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)
3539 %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)
3540 ret <vscale x 32 x half> %v
3543 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) {
3544 ; CHECK-LABEL: vfmsub_vf_nxv32f16_unmasked_commute:
3546 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3547 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16
3549 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3550 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3551 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3552 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3553 %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)
3554 %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)
3555 ret <vscale x 32 x half> %v
3558 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) {
3559 ; CHECK-LABEL: vfnmadd_vv_nxv32f16:
3561 ; CHECK-NEXT: vl8re16.v v24, (a0)
3562 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3563 ; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t
3564 ; CHECK-NEXT: vmv.v.v v8, v16
3566 %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)
3567 %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)
3568 %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)
3569 ret <vscale x 32 x half> %v
3572 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) {
3573 ; CHECK-LABEL: vfnmadd_vv_nxv32f16_commuted:
3575 ; CHECK-NEXT: vl8re16.v v24, (a0)
3576 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3577 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t
3579 %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)
3580 %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)
3581 %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)
3582 ret <vscale x 32 x half> %v
3585 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) {
3586 ; CHECK-LABEL: vfnmadd_vv_nxv32f16_unmasked:
3588 ; CHECK-NEXT: vl8re16.v v24, (a0)
3589 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3590 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
3592 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3593 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3594 %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)
3595 %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)
3596 %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)
3597 ret <vscale x 32 x half> %v
3600 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) {
3601 ; CHECK-LABEL: vfnmadd_vv_nxv32f16_unmasked_commuted:
3603 ; CHECK-NEXT: vl8re16.v v24, (a0)
3604 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3605 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
3607 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3608 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3609 %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)
3610 %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)
3611 %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)
3612 ret <vscale x 32 x half> %v
3615 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) {
3616 ; CHECK-LABEL: vfnmadd_vf_nxv32f16:
3618 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3619 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
3621 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3622 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3623 %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)
3624 %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)
3625 %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)
3626 ret <vscale x 32 x half> %v
3629 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) {
3630 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_commute:
3632 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3633 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
3635 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3636 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3637 %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)
3638 %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)
3639 %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)
3640 ret <vscale x 32 x half> %v
3643 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) {
3644 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_unmasked:
3646 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3647 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
3649 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3650 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3651 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3652 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3653 %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)
3654 %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)
3655 %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)
3656 ret <vscale x 32 x half> %v
3659 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) {
3660 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_unmasked_commute:
3662 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3663 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
3665 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3666 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3667 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3668 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3669 %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)
3670 %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)
3671 %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)
3672 ret <vscale x 32 x half> %v
3675 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) {
3676 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat:
3678 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3679 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
3681 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3682 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3683 %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)
3684 %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)
3685 %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)
3686 ret <vscale x 32 x half> %v
3689 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) {
3690 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_commute:
3692 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3693 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
3695 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3696 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3697 %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)
3698 %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)
3699 %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)
3700 ret <vscale x 32 x half> %v
3703 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) {
3704 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked:
3706 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3707 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
3709 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3710 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3711 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3712 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3713 %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)
3714 %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)
3715 %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)
3716 ret <vscale x 32 x half> %v
3719 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) {
3720 ; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked_commute:
3722 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3723 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
3725 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3726 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3727 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3728 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3729 %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)
3730 %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)
3731 %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)
3732 ret <vscale x 32 x half> %v
3735 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) {
3736 ; CHECK-LABEL: vfnmsub_vv_nxv32f16:
3738 ; CHECK-NEXT: vl8re16.v v24, (a0)
3739 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3740 ; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t
3741 ; CHECK-NEXT: vmv.v.v v8, v16
3743 %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)
3744 %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)
3745 %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)
3746 ret <vscale x 32 x half> %v
3749 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) {
3750 ; CHECK-LABEL: vfnmsub_vv_nxv32f16_commuted:
3752 ; CHECK-NEXT: vl8re16.v v24, (a0)
3753 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3754 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t
3756 %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)
3757 %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)
3758 %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)
3759 ret <vscale x 32 x half> %v
3762 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) {
3763 ; CHECK-LABEL: vfnmsub_vv_nxv32f16_unmasked:
3765 ; CHECK-NEXT: vl8re16.v v24, (a0)
3766 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3767 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
3769 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3770 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3771 %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)
3772 %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)
3773 %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)
3774 ret <vscale x 32 x half> %v
3777 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) {
3778 ; CHECK-LABEL: vfnmsub_vv_nxv32f16_unmasked_commuted:
3780 ; CHECK-NEXT: vl8re16.v v24, (a0)
3781 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
3782 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
3784 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3785 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3786 %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)
3787 %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)
3788 %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)
3789 ret <vscale x 32 x half> %v
3792 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) {
3793 ; CHECK-LABEL: vfnmsub_vf_nxv32f16:
3795 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3796 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
3798 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3799 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3800 %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)
3801 %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)
3802 ret <vscale x 32 x half> %v
3805 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) {
3806 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_commute:
3808 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3809 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
3811 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3812 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3813 %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)
3814 %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)
3815 ret <vscale x 32 x half> %v
3818 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) {
3819 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_unmasked:
3821 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3822 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
3824 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3825 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3826 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3827 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3828 %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)
3829 %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)
3830 ret <vscale x 32 x half> %v
3833 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) {
3834 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_unmasked_commute:
3836 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3837 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
3839 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3840 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3841 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3842 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3843 %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)
3844 %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)
3845 ret <vscale x 32 x half> %v
3848 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) {
3849 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat:
3851 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3852 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
3854 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3855 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3856 %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)
3857 %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)
3858 ret <vscale x 32 x half> %v
3861 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) {
3862 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_commute:
3864 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3865 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
3867 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3868 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3869 %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)
3870 %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)
3871 ret <vscale x 32 x half> %v
3874 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) {
3875 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked:
3877 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3878 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
3880 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3881 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3882 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3883 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3884 %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)
3885 %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)
3886 ret <vscale x 32 x half> %v
3889 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) {
3890 ; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked_commute:
3892 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
3893 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
3895 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3896 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3897 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
3898 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
3899 %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)
3900 %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)
3901 ret <vscale x 32 x half> %v
3904 declare <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
3906 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) {
3907 ; CHECK-LABEL: vfmsub_vv_nxv1f32:
3909 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3910 ; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t
3911 ; CHECK-NEXT: vmv1r.v v8, v9
3913 %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)
3914 %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)
3915 ret <vscale x 1 x float> %v
3918 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) {
3919 ; CHECK-LABEL: vfmsub_vv_nxv1f32_unmasked:
3921 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3922 ; CHECK-NEXT: vfmsub.vv v8, v9, v10
3924 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
3925 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
3926 %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)
3927 %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)
3928 ret <vscale x 1 x float> %v
3931 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) {
3932 ; CHECK-LABEL: vfmsub_vf_nxv1f32:
3934 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3935 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
3937 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3938 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3939 %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)
3940 %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)
3941 ret <vscale x 1 x float> %v
3944 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) {
3945 ; CHECK-LABEL: vfmsub_vf_nxv1f32_commute:
3947 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3948 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
3950 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3951 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3952 %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)
3953 %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)
3954 ret <vscale x 1 x float> %v
3957 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) {
3958 ; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked:
3960 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3961 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
3963 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3964 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3965 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
3966 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
3967 %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)
3968 %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)
3969 ret <vscale x 1 x float> %v
3972 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) {
3973 ; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked_commute:
3975 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3976 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
3978 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
3979 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
3980 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
3981 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
3982 %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)
3983 %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)
3984 ret <vscale x 1 x float> %v
3987 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) {
3988 ; CHECK-LABEL: vfnmadd_vv_nxv1f32:
3990 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3991 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
3992 ; CHECK-NEXT: vmv1r.v v8, v9
3994 %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)
3995 %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)
3996 %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)
3997 ret <vscale x 1 x float> %v
4000 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) {
4001 ; CHECK-LABEL: vfnmadd_vv_nxv1f32_commuted:
4003 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4004 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
4006 %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)
4007 %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)
4008 %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)
4009 ret <vscale x 1 x float> %v
4012 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) {
4013 ; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked:
4015 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4016 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
4018 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4019 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4020 %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)
4021 %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)
4022 %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)
4023 ret <vscale x 1 x float> %v
4026 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) {
4027 ; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked_commuted:
4029 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4030 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
4032 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4033 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4034 %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)
4035 %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)
4036 %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)
4037 ret <vscale x 1 x float> %v
4040 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) {
4041 ; CHECK-LABEL: vfnmadd_vf_nxv1f32:
4043 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4044 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
4046 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4047 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4048 %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)
4049 %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)
4050 %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)
4051 ret <vscale x 1 x float> %v
4054 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) {
4055 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_commute:
4057 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4058 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
4060 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4061 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4062 %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)
4063 %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)
4064 %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)
4065 ret <vscale x 1 x float> %v
4068 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) {
4069 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked:
4071 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4072 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
4074 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4075 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4076 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4077 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4078 %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)
4079 %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)
4080 %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)
4081 ret <vscale x 1 x float> %v
4084 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) {
4085 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked_commute:
4087 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4088 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
4090 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4091 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4092 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4093 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4094 %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)
4095 %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)
4096 %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)
4097 ret <vscale x 1 x float> %v
4100 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) {
4101 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat:
4103 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4104 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
4106 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4107 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4108 %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)
4109 %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)
4110 %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)
4111 ret <vscale x 1 x float> %v
4114 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) {
4115 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_commute:
4117 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4118 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
4120 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4121 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4122 %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)
4123 %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)
4124 %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)
4125 ret <vscale x 1 x float> %v
4128 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) {
4129 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked:
4131 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4132 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
4134 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4135 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4136 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4137 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4138 %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)
4139 %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)
4140 %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)
4141 ret <vscale x 1 x float> %v
4144 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) {
4145 ; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked_commute:
4147 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4148 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
4150 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4151 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4152 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4153 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4154 %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)
4155 %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)
4156 %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)
4157 ret <vscale x 1 x float> %v
4160 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) {
4161 ; CHECK-LABEL: vfnmsub_vv_nxv1f32:
4163 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4164 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
4165 ; CHECK-NEXT: vmv1r.v v8, v9
4167 %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)
4168 %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)
4169 %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)
4170 ret <vscale x 1 x float> %v
4173 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) {
4174 ; CHECK-LABEL: vfnmsub_vv_nxv1f32_commuted:
4176 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4177 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
4179 %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)
4180 %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)
4181 %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)
4182 ret <vscale x 1 x float> %v
4185 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) {
4186 ; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked:
4188 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4189 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
4191 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4192 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4193 %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)
4194 %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)
4195 %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)
4196 ret <vscale x 1 x float> %v
4199 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) {
4200 ; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked_commuted:
4202 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4203 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
4205 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4206 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4207 %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)
4208 %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)
4209 %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)
4210 ret <vscale x 1 x float> %v
4213 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) {
4214 ; CHECK-LABEL: vfnmsub_vf_nxv1f32:
4216 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4217 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
4219 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4220 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4221 %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)
4222 %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)
4223 ret <vscale x 1 x float> %v
4226 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) {
4227 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_commute:
4229 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4230 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
4232 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4233 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4234 %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)
4235 %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)
4236 ret <vscale x 1 x float> %v
4239 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) {
4240 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked:
4242 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4243 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
4245 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4246 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4247 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4248 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4249 %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)
4250 %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)
4251 ret <vscale x 1 x float> %v
4254 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) {
4255 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked_commute:
4257 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4258 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
4260 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4261 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4262 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4263 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4264 %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)
4265 %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)
4266 ret <vscale x 1 x float> %v
4269 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) {
4270 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat:
4272 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4273 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
4275 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4276 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4277 %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)
4278 %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)
4279 ret <vscale x 1 x float> %v
4282 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) {
4283 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_commute:
4285 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4286 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
4288 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4289 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4290 %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)
4291 %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)
4292 ret <vscale x 1 x float> %v
4295 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) {
4296 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked:
4298 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4299 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
4301 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4302 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4303 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4304 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4305 %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)
4306 %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)
4307 ret <vscale x 1 x float> %v
4310 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) {
4311 ; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked_commute:
4313 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
4314 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
4316 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
4317 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
4318 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
4319 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
4320 %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)
4321 %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)
4322 ret <vscale x 1 x float> %v
4325 declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
4327 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) {
4328 ; CHECK-LABEL: vfmsub_vv_nxv2f32:
4330 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4331 ; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t
4332 ; CHECK-NEXT: vmv.v.v v8, v9
4334 %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)
4335 %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)
4336 ret <vscale x 2 x float> %v
4339 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) {
4340 ; CHECK-LABEL: vfmsub_vv_nxv2f32_unmasked:
4342 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4343 ; CHECK-NEXT: vfmsub.vv v8, v9, v10
4345 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4346 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4347 %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)
4348 %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)
4349 ret <vscale x 2 x float> %v
4352 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) {
4353 ; CHECK-LABEL: vfmsub_vf_nxv2f32:
4355 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4356 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
4358 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4359 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4360 %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)
4361 %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)
4362 ret <vscale x 2 x float> %v
4365 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) {
4366 ; CHECK-LABEL: vfmsub_vf_nxv2f32_commute:
4368 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4369 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
4371 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4372 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4373 %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)
4374 %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)
4375 ret <vscale x 2 x float> %v
4378 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) {
4379 ; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked:
4381 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4382 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
4384 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4385 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4386 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4387 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4388 %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)
4389 %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)
4390 ret <vscale x 2 x float> %v
4393 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) {
4394 ; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked_commute:
4396 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4397 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
4399 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4400 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4401 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4402 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4403 %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)
4404 %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)
4405 ret <vscale x 2 x float> %v
4408 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) {
4409 ; CHECK-LABEL: vfnmadd_vv_nxv2f32:
4411 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4412 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
4413 ; CHECK-NEXT: vmv.v.v v8, v9
4415 %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)
4416 %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)
4417 %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)
4418 ret <vscale x 2 x float> %v
4421 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) {
4422 ; CHECK-LABEL: vfnmadd_vv_nxv2f32_commuted:
4424 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4425 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
4427 %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)
4428 %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)
4429 %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)
4430 ret <vscale x 2 x float> %v
4433 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) {
4434 ; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked:
4436 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4437 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
4439 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4440 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4441 %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)
4442 %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)
4443 %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)
4444 ret <vscale x 2 x float> %v
4447 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) {
4448 ; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked_commuted:
4450 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4451 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
4453 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4454 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4455 %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)
4456 %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)
4457 %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)
4458 ret <vscale x 2 x float> %v
4461 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) {
4462 ; CHECK-LABEL: vfnmadd_vf_nxv2f32:
4464 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4465 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
4467 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4468 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4469 %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)
4470 %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)
4471 %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)
4472 ret <vscale x 2 x float> %v
4475 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) {
4476 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_commute:
4478 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4479 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
4481 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4482 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4483 %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)
4484 %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)
4485 %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)
4486 ret <vscale x 2 x float> %v
4489 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) {
4490 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked:
4492 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4493 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
4495 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4496 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4497 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4498 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4499 %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)
4500 %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)
4501 %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)
4502 ret <vscale x 2 x float> %v
4505 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) {
4506 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked_commute:
4508 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4509 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
4511 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4512 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4513 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4514 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4515 %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)
4516 %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)
4517 %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)
4518 ret <vscale x 2 x float> %v
4521 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) {
4522 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat:
4524 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4525 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
4527 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4528 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4529 %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)
4530 %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)
4531 %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)
4532 ret <vscale x 2 x float> %v
4535 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) {
4536 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_commute:
4538 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4539 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
4541 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4542 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4543 %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)
4544 %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)
4545 %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)
4546 ret <vscale x 2 x float> %v
4549 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) {
4550 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked:
4552 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4553 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
4555 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4556 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4557 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4558 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4559 %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)
4560 %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)
4561 %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)
4562 ret <vscale x 2 x float> %v
4565 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) {
4566 ; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked_commute:
4568 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4569 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
4571 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4572 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4573 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4574 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4575 %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)
4576 %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)
4577 %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)
4578 ret <vscale x 2 x float> %v
4581 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) {
4582 ; CHECK-LABEL: vfnmsub_vv_nxv2f32:
4584 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4585 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
4586 ; CHECK-NEXT: vmv.v.v v8, v9
4588 %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)
4589 %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)
4590 %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)
4591 ret <vscale x 2 x float> %v
4594 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) {
4595 ; CHECK-LABEL: vfnmsub_vv_nxv2f32_commuted:
4597 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4598 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
4600 %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)
4601 %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)
4602 %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)
4603 ret <vscale x 2 x float> %v
4606 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) {
4607 ; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked:
4609 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4610 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
4612 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4613 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4614 %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)
4615 %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)
4616 %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)
4617 ret <vscale x 2 x float> %v
4620 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) {
4621 ; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked_commuted:
4623 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4624 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
4626 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4627 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4628 %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)
4629 %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)
4630 %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)
4631 ret <vscale x 2 x float> %v
4634 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) {
4635 ; CHECK-LABEL: vfnmsub_vf_nxv2f32:
4637 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4638 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
4640 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4641 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4642 %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)
4643 %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)
4644 ret <vscale x 2 x float> %v
4647 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) {
4648 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_commute:
4650 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4651 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
4653 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4654 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4655 %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)
4656 %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)
4657 ret <vscale x 2 x float> %v
4660 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) {
4661 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked:
4663 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4664 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
4666 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4667 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4668 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4669 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4670 %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)
4671 %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)
4672 ret <vscale x 2 x float> %v
4675 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) {
4676 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked_commute:
4678 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4679 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
4681 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4682 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4683 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4684 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4685 %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)
4686 %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)
4687 ret <vscale x 2 x float> %v
4690 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) {
4691 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat:
4693 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4694 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
4696 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4697 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4698 %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)
4699 %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)
4700 ret <vscale x 2 x float> %v
4703 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) {
4704 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_commute:
4706 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4707 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
4709 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4710 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4711 %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)
4712 %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)
4713 ret <vscale x 2 x float> %v
4716 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) {
4717 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked:
4719 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4720 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
4722 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4723 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4724 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4725 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4726 %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)
4727 %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)
4728 ret <vscale x 2 x float> %v
4731 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) {
4732 ; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked_commute:
4734 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
4735 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
4737 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
4738 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
4739 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
4740 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
4741 %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)
4742 %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)
4743 ret <vscale x 2 x float> %v
4746 declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
4748 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) {
4749 ; CHECK-LABEL: vfmsub_vv_nxv4f32:
4751 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4752 ; CHECK-NEXT: vfmsub.vv v10, v8, v12, v0.t
4753 ; CHECK-NEXT: vmv.v.v v8, v10
4755 %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)
4756 %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)
4757 ret <vscale x 4 x float> %v
4760 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) {
4761 ; CHECK-LABEL: vfmsub_vv_nxv4f32_unmasked:
4763 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4764 ; CHECK-NEXT: vfmsub.vv v8, v10, v12
4766 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4767 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4768 %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)
4769 %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)
4770 ret <vscale x 4 x float> %v
4773 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) {
4774 ; CHECK-LABEL: vfmsub_vf_nxv4f32:
4776 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4777 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t
4779 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4780 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4781 %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)
4782 %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)
4783 ret <vscale x 4 x float> %v
4786 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) {
4787 ; CHECK-LABEL: vfmsub_vf_nxv4f32_commute:
4789 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4790 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t
4792 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4793 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4794 %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)
4795 %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)
4796 ret <vscale x 4 x float> %v
4799 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) {
4800 ; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked:
4802 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4803 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10
4805 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4806 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4807 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4808 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4809 %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)
4810 %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)
4811 ret <vscale x 4 x float> %v
4814 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) {
4815 ; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked_commute:
4817 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4818 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10
4820 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4821 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4822 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4823 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4824 %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)
4825 %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)
4826 ret <vscale x 4 x float> %v
4829 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) {
4830 ; CHECK-LABEL: vfnmadd_vv_nxv4f32:
4832 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4833 ; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t
4834 ; CHECK-NEXT: vmv.v.v v8, v10
4836 %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)
4837 %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)
4838 %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)
4839 ret <vscale x 4 x float> %v
4842 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) {
4843 ; CHECK-LABEL: vfnmadd_vv_nxv4f32_commuted:
4845 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4846 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t
4848 %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)
4849 %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)
4850 %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)
4851 ret <vscale x 4 x float> %v
4854 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) {
4855 ; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked:
4857 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4858 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
4860 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4861 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4862 %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)
4863 %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)
4864 %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)
4865 ret <vscale x 4 x float> %v
4868 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) {
4869 ; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked_commuted:
4871 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4872 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
4874 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4875 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4876 %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)
4877 %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)
4878 %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)
4879 ret <vscale x 4 x float> %v
4882 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) {
4883 ; CHECK-LABEL: vfnmadd_vf_nxv4f32:
4885 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4886 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
4888 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4889 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4890 %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)
4891 %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)
4892 %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)
4893 ret <vscale x 4 x float> %v
4896 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) {
4897 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_commute:
4899 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4900 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
4902 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4903 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4904 %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)
4905 %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)
4906 %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)
4907 ret <vscale x 4 x float> %v
4910 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) {
4911 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked:
4913 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4914 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
4916 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4917 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4918 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4919 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4920 %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)
4921 %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)
4922 %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)
4923 ret <vscale x 4 x float> %v
4926 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) {
4927 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked_commute:
4929 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4930 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
4932 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4933 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4934 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4935 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4936 %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)
4937 %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)
4938 %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)
4939 ret <vscale x 4 x float> %v
4942 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) {
4943 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat:
4945 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4946 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
4948 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4949 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4950 %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)
4951 %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)
4952 %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)
4953 ret <vscale x 4 x float> %v
4956 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) {
4957 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_commute:
4959 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4960 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
4962 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4963 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4964 %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)
4965 %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)
4966 %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)
4967 ret <vscale x 4 x float> %v
4970 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) {
4971 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked:
4973 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4974 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
4976 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4977 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4978 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4979 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4980 %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)
4981 %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)
4982 %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)
4983 ret <vscale x 4 x float> %v
4986 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) {
4987 ; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked_commute:
4989 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
4990 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
4992 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
4993 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
4994 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
4995 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
4996 %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)
4997 %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)
4998 %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)
4999 ret <vscale x 4 x float> %v
5002 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) {
5003 ; CHECK-LABEL: vfnmsub_vv_nxv4f32:
5005 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5006 ; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t
5007 ; CHECK-NEXT: vmv.v.v v8, v10
5009 %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)
5010 %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)
5011 %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)
5012 ret <vscale x 4 x float> %v
5015 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) {
5016 ; CHECK-LABEL: vfnmsub_vv_nxv4f32_commuted:
5018 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5019 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t
5021 %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)
5022 %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)
5023 %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)
5024 ret <vscale x 4 x float> %v
5027 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) {
5028 ; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked:
5030 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5031 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
5033 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
5034 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
5035 %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)
5036 %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)
5037 %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)
5038 ret <vscale x 4 x float> %v
5041 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) {
5042 ; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked_commuted:
5044 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5045 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
5047 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
5048 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
5049 %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)
5050 %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)
5051 %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)
5052 ret <vscale x 4 x float> %v
5055 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) {
5056 ; CHECK-LABEL: vfnmsub_vf_nxv4f32:
5058 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5059 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
5061 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5062 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5063 %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)
5064 %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)
5065 ret <vscale x 4 x float> %v
5068 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) {
5069 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_commute:
5071 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5072 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
5074 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5075 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5076 %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)
5077 %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)
5078 ret <vscale x 4 x float> %v
5081 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) {
5082 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked:
5084 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5085 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
5087 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5088 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5089 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
5090 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
5091 %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)
5092 %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)
5093 ret <vscale x 4 x float> %v
5096 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) {
5097 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked_commute:
5099 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5100 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
5102 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5103 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5104 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
5105 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
5106 %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)
5107 %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)
5108 ret <vscale x 4 x float> %v
5111 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) {
5112 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat:
5114 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5115 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
5117 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5118 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5119 %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)
5120 %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)
5121 ret <vscale x 4 x float> %v
5124 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) {
5125 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_commute:
5127 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5128 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
5130 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5131 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5132 %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)
5133 %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)
5134 ret <vscale x 4 x float> %v
5137 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) {
5138 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked:
5140 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5141 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
5143 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5144 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5145 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
5146 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
5147 %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)
5148 %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)
5149 ret <vscale x 4 x float> %v
5152 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) {
5153 ; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked_commute:
5155 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5156 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
5158 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
5159 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
5160 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
5161 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
5162 %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)
5163 %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)
5164 ret <vscale x 4 x float> %v
5167 declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
5169 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) {
5170 ; CHECK-LABEL: vfmsub_vv_nxv8f32:
5172 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5173 ; CHECK-NEXT: vfmsub.vv v12, v8, v16, v0.t
5174 ; CHECK-NEXT: vmv.v.v v8, v12
5176 %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)
5177 %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)
5178 ret <vscale x 8 x float> %v
5181 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) {
5182 ; CHECK-LABEL: vfmsub_vv_nxv8f32_unmasked:
5184 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5185 ; CHECK-NEXT: vfmsub.vv v8, v12, v16
5187 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5188 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5189 %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)
5190 %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)
5191 ret <vscale x 8 x float> %v
5194 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) {
5195 ; CHECK-LABEL: vfmsub_vf_nxv8f32:
5197 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5198 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t
5200 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5201 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5202 %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)
5203 %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)
5204 ret <vscale x 8 x float> %v
5207 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) {
5208 ; CHECK-LABEL: vfmsub_vf_nxv8f32_commute:
5210 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5211 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t
5213 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5214 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5215 %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)
5216 %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)
5217 ret <vscale x 8 x float> %v
5220 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) {
5221 ; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked:
5223 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5224 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12
5226 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5227 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5228 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5229 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5230 %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)
5231 %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)
5232 ret <vscale x 8 x float> %v
5235 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) {
5236 ; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked_commute:
5238 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5239 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12
5241 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5242 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5243 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5244 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5245 %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)
5246 %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)
5247 ret <vscale x 8 x float> %v
5250 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) {
5251 ; CHECK-LABEL: vfnmadd_vv_nxv8f32:
5253 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5254 ; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t
5255 ; CHECK-NEXT: vmv.v.v v8, v12
5257 %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)
5258 %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)
5259 %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)
5260 ret <vscale x 8 x float> %v
5263 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) {
5264 ; CHECK-LABEL: vfnmadd_vv_nxv8f32_commuted:
5266 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5267 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t
5269 %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)
5270 %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)
5271 %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)
5272 ret <vscale x 8 x float> %v
5275 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) {
5276 ; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked:
5278 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5279 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
5281 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5282 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5283 %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)
5284 %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)
5285 %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)
5286 ret <vscale x 8 x float> %v
5289 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) {
5290 ; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked_commuted:
5292 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5293 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
5295 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5296 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5297 %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)
5298 %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)
5299 %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)
5300 ret <vscale x 8 x float> %v
5303 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) {
5304 ; CHECK-LABEL: vfnmadd_vf_nxv8f32:
5306 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5307 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
5309 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5310 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5311 %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)
5312 %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)
5313 %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)
5314 ret <vscale x 8 x float> %v
5317 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) {
5318 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_commute:
5320 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5321 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
5323 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5324 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5325 %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)
5326 %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)
5327 %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)
5328 ret <vscale x 8 x float> %v
5331 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) {
5332 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked:
5334 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5335 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
5337 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5338 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5339 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5340 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5341 %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)
5342 %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)
5343 %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)
5344 ret <vscale x 8 x float> %v
5347 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) {
5348 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked_commute:
5350 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5351 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
5353 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5354 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5355 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5356 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5357 %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)
5358 %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)
5359 %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)
5360 ret <vscale x 8 x float> %v
5363 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) {
5364 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat:
5366 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5367 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
5369 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5370 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5371 %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)
5372 %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)
5373 %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)
5374 ret <vscale x 8 x float> %v
5377 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) {
5378 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_commute:
5380 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5381 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
5383 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5384 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5385 %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)
5386 %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)
5387 %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)
5388 ret <vscale x 8 x float> %v
5391 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) {
5392 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked:
5394 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5395 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
5397 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5398 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5399 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5400 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5401 %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)
5402 %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)
5403 %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)
5404 ret <vscale x 8 x float> %v
5407 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) {
5408 ; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked_commute:
5410 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5411 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
5413 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5414 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5415 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5416 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5417 %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)
5418 %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)
5419 %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)
5420 ret <vscale x 8 x float> %v
5423 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) {
5424 ; CHECK-LABEL: vfnmsub_vv_nxv8f32:
5426 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5427 ; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t
5428 ; CHECK-NEXT: vmv.v.v v8, v12
5430 %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)
5431 %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)
5432 %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)
5433 ret <vscale x 8 x float> %v
5436 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) {
5437 ; CHECK-LABEL: vfnmsub_vv_nxv8f32_commuted:
5439 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5440 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t
5442 %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)
5443 %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)
5444 %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)
5445 ret <vscale x 8 x float> %v
5448 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) {
5449 ; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked:
5451 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5452 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
5454 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5455 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5456 %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)
5457 %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)
5458 %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)
5459 ret <vscale x 8 x float> %v
5462 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) {
5463 ; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked_commuted:
5465 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5466 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
5468 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5469 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5470 %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)
5471 %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)
5472 %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)
5473 ret <vscale x 8 x float> %v
5476 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) {
5477 ; CHECK-LABEL: vfnmsub_vf_nxv8f32:
5479 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5480 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
5482 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5483 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5484 %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)
5485 %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)
5486 ret <vscale x 8 x float> %v
5489 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) {
5490 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_commute:
5492 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5493 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
5495 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5496 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5497 %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)
5498 %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)
5499 ret <vscale x 8 x float> %v
5502 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) {
5503 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked:
5505 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5506 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
5508 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5509 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5510 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5511 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5512 %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)
5513 %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)
5514 ret <vscale x 8 x float> %v
5517 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) {
5518 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked_commute:
5520 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5521 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
5523 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5524 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5525 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5526 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5527 %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)
5528 %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)
5529 ret <vscale x 8 x float> %v
5532 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) {
5533 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat:
5535 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5536 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
5538 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5539 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5540 %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)
5541 %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)
5542 ret <vscale x 8 x float> %v
5545 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) {
5546 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_commute:
5548 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5549 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
5551 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5552 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5553 %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)
5554 %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)
5555 ret <vscale x 8 x float> %v
5558 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) {
5559 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked:
5561 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5562 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
5564 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5565 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5566 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5567 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5568 %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)
5569 %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)
5570 ret <vscale x 8 x float> %v
5573 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) {
5574 ; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked_commute:
5576 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
5577 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
5579 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5580 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5581 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
5582 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
5583 %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)
5584 %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)
5585 ret <vscale x 8 x float> %v
5588 declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
5590 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) {
5591 ; CHECK-LABEL: vfmsub_vv_nxv16f32:
5593 ; CHECK-NEXT: vl8re32.v v24, (a0)
5594 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5595 ; CHECK-NEXT: vfmsub.vv v16, v8, v24, v0.t
5596 ; CHECK-NEXT: vmv.v.v v8, v16
5598 %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)
5599 %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)
5600 ret <vscale x 16 x float> %v
5603 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) {
5604 ; CHECK-LABEL: vfmsub_vv_nxv16f32_unmasked:
5606 ; CHECK-NEXT: vl8re32.v v24, (a0)
5607 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5608 ; CHECK-NEXT: vfmsub.vv v8, v16, v24
5610 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5611 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5612 %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)
5613 %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)
5614 ret <vscale x 16 x float> %v
5617 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) {
5618 ; CHECK-LABEL: vfmsub_vf_nxv16f32:
5620 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5621 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t
5623 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5624 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5625 %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)
5626 %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)
5627 ret <vscale x 16 x float> %v
5630 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) {
5631 ; CHECK-LABEL: vfmsub_vf_nxv16f32_commute:
5633 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5634 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t
5636 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5637 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5638 %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)
5639 %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)
5640 ret <vscale x 16 x float> %v
5643 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) {
5644 ; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked:
5646 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5647 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16
5649 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5650 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5651 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5652 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5653 %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)
5654 %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)
5655 ret <vscale x 16 x float> %v
5658 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) {
5659 ; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked_commute:
5661 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5662 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16
5664 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5665 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5666 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5667 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5668 %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)
5669 %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)
5670 ret <vscale x 16 x float> %v
5673 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) {
5674 ; CHECK-LABEL: vfnmadd_vv_nxv16f32:
5676 ; CHECK-NEXT: vl8re32.v v24, (a0)
5677 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5678 ; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t
5679 ; CHECK-NEXT: vmv.v.v v8, v16
5681 %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)
5682 %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)
5683 %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)
5684 ret <vscale x 16 x float> %v
5687 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) {
5688 ; CHECK-LABEL: vfnmadd_vv_nxv16f32_commuted:
5690 ; CHECK-NEXT: vl8re32.v v24, (a0)
5691 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5692 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t
5694 %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)
5695 %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)
5696 %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)
5697 ret <vscale x 16 x float> %v
5700 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) {
5701 ; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked:
5703 ; CHECK-NEXT: vl8re32.v v24, (a0)
5704 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5705 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
5707 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5708 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5709 %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)
5710 %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)
5711 %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)
5712 ret <vscale x 16 x float> %v
5715 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) {
5716 ; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked_commuted:
5718 ; CHECK-NEXT: vl8re32.v v24, (a0)
5719 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5720 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
5722 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5723 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5724 %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)
5725 %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)
5726 %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)
5727 ret <vscale x 16 x float> %v
5730 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) {
5731 ; CHECK-LABEL: vfnmadd_vf_nxv16f32:
5733 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5734 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
5736 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5737 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5738 %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)
5739 %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)
5740 %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)
5741 ret <vscale x 16 x float> %v
5744 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) {
5745 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_commute:
5747 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5748 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
5750 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5751 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5752 %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)
5753 %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)
5754 %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)
5755 ret <vscale x 16 x float> %v
5758 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) {
5759 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked:
5761 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5762 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
5764 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5765 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5766 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5767 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5768 %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)
5769 %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)
5770 %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)
5771 ret <vscale x 16 x float> %v
5774 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) {
5775 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked_commute:
5777 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5778 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
5780 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5781 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5782 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5783 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5784 %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)
5785 %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)
5786 %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)
5787 ret <vscale x 16 x float> %v
5790 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) {
5791 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat:
5793 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5794 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
5796 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5797 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5798 %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)
5799 %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)
5800 %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)
5801 ret <vscale x 16 x float> %v
5804 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) {
5805 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_commute:
5807 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5808 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
5810 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5811 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5812 %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)
5813 %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)
5814 %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)
5815 ret <vscale x 16 x float> %v
5818 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) {
5819 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked:
5821 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5822 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
5824 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5825 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5826 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5827 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5828 %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)
5829 %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)
5830 %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)
5831 ret <vscale x 16 x float> %v
5834 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) {
5835 ; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked_commute:
5837 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5838 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
5840 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5841 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5842 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5843 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5844 %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)
5845 %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)
5846 %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)
5847 ret <vscale x 16 x float> %v
5850 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) {
5851 ; CHECK-LABEL: vfnmsub_vv_nxv16f32:
5853 ; CHECK-NEXT: vl8re32.v v24, (a0)
5854 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5855 ; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t
5856 ; CHECK-NEXT: vmv.v.v v8, v16
5858 %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)
5859 %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)
5860 %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)
5861 ret <vscale x 16 x float> %v
5864 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) {
5865 ; CHECK-LABEL: vfnmsub_vv_nxv16f32_commuted:
5867 ; CHECK-NEXT: vl8re32.v v24, (a0)
5868 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5869 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t
5871 %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)
5872 %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)
5873 %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)
5874 ret <vscale x 16 x float> %v
5877 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) {
5878 ; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked:
5880 ; CHECK-NEXT: vl8re32.v v24, (a0)
5881 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5882 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
5884 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5885 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5886 %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)
5887 %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)
5888 %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)
5889 ret <vscale x 16 x float> %v
5892 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) {
5893 ; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked_commuted:
5895 ; CHECK-NEXT: vl8re32.v v24, (a0)
5896 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
5897 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
5899 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5900 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5901 %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)
5902 %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)
5903 %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)
5904 ret <vscale x 16 x float> %v
5907 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) {
5908 ; CHECK-LABEL: vfnmsub_vf_nxv16f32:
5910 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5911 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
5913 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5914 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5915 %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)
5916 %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)
5917 ret <vscale x 16 x float> %v
5920 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) {
5921 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_commute:
5923 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5924 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
5926 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5927 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5928 %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)
5929 %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)
5930 ret <vscale x 16 x float> %v
5933 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) {
5934 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked:
5936 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5937 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
5939 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5940 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5941 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5942 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5943 %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)
5944 %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)
5945 ret <vscale x 16 x float> %v
5948 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) {
5949 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked_commute:
5951 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5952 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
5954 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5955 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5956 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5957 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5958 %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)
5959 %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)
5960 ret <vscale x 16 x float> %v
5963 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) {
5964 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat:
5966 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5967 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
5969 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5970 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5971 %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)
5972 %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)
5973 ret <vscale x 16 x float> %v
5976 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) {
5977 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_commute:
5979 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5980 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
5982 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5983 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5984 %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)
5985 %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)
5986 ret <vscale x 16 x float> %v
5989 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) {
5990 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked:
5992 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
5993 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
5995 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
5996 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
5997 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
5998 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
5999 %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)
6000 %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)
6001 ret <vscale x 16 x float> %v
6004 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) {
6005 ; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked_commute:
6007 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
6008 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
6010 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
6011 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
6012 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
6013 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
6014 %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)
6015 %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)
6016 ret <vscale x 16 x float> %v
6019 declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
6021 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) {
6022 ; CHECK-LABEL: vfmsub_vv_nxv1f64:
6024 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6025 ; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t
6026 ; CHECK-NEXT: vmv.v.v v8, v9
6028 %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)
6029 %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)
6030 ret <vscale x 1 x double> %v
6033 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) {
6034 ; CHECK-LABEL: vfmsub_vv_nxv1f64_unmasked:
6036 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6037 ; CHECK-NEXT: vfmsub.vv v8, v9, v10
6039 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6040 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6041 %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)
6042 %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)
6043 ret <vscale x 1 x double> %v
6046 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) {
6047 ; CHECK-LABEL: vfmsub_vf_nxv1f64:
6049 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6050 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
6052 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6053 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6054 %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)
6055 %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)
6056 ret <vscale x 1 x double> %v
6059 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) {
6060 ; CHECK-LABEL: vfmsub_vf_nxv1f64_commute:
6062 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6063 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t
6065 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6066 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6067 %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)
6068 %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)
6069 ret <vscale x 1 x double> %v
6072 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) {
6073 ; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked:
6075 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6076 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
6078 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6079 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6080 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6081 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6082 %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)
6083 %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)
6084 ret <vscale x 1 x double> %v
6087 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) {
6088 ; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked_commute:
6090 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6091 ; CHECK-NEXT: vfmsub.vf v8, fa0, v9
6093 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6094 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6095 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6096 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6097 %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)
6098 %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)
6099 ret <vscale x 1 x double> %v
6102 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) {
6103 ; CHECK-LABEL: vfnmadd_vv_nxv1f64:
6105 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6106 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
6107 ; CHECK-NEXT: vmv.v.v v8, v9
6109 %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)
6110 %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)
6111 %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)
6112 ret <vscale x 1 x double> %v
6115 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) {
6116 ; CHECK-LABEL: vfnmadd_vv_nxv1f64_commuted:
6118 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6119 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
6121 %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)
6122 %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)
6123 %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)
6124 ret <vscale x 1 x double> %v
6127 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) {
6128 ; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked:
6130 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6131 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
6133 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6134 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6135 %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)
6136 %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)
6137 %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)
6138 ret <vscale x 1 x double> %v
6141 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) {
6142 ; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked_commuted:
6144 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6145 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
6147 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6148 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6149 %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)
6150 %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)
6151 %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)
6152 ret <vscale x 1 x double> %v
6155 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) {
6156 ; CHECK-LABEL: vfnmadd_vf_nxv1f64:
6158 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6159 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
6161 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6162 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6163 %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)
6164 %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)
6165 %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)
6166 ret <vscale x 1 x double> %v
6169 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) {
6170 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_commute:
6172 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6173 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
6175 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6176 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6177 %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)
6178 %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)
6179 %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)
6180 ret <vscale x 1 x double> %v
6183 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) {
6184 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked:
6186 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6187 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
6189 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6190 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6191 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6192 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6193 %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)
6194 %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)
6195 %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)
6196 ret <vscale x 1 x double> %v
6199 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) {
6200 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked_commute:
6202 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6203 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
6205 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6206 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6207 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6208 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6209 %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)
6210 %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)
6211 %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)
6212 ret <vscale x 1 x double> %v
6215 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) {
6216 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat:
6218 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6219 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
6221 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6222 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6223 %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)
6224 %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)
6225 %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)
6226 ret <vscale x 1 x double> %v
6229 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) {
6230 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_commute:
6232 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6233 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t
6235 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6236 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6237 %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)
6238 %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)
6239 %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)
6240 ret <vscale x 1 x double> %v
6243 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) {
6244 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked:
6246 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6247 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
6249 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6250 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6251 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6252 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6253 %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)
6254 %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)
6255 %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)
6256 ret <vscale x 1 x double> %v
6259 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) {
6260 ; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked_commute:
6262 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6263 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v9
6265 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6266 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6267 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6268 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6269 %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)
6270 %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)
6271 %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)
6272 ret <vscale x 1 x double> %v
6275 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) {
6276 ; CHECK-LABEL: vfnmsub_vv_nxv1f64:
6278 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6279 ; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t
6280 ; CHECK-NEXT: vmv.v.v v8, v9
6282 %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)
6283 %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)
6284 %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)
6285 ret <vscale x 1 x double> %v
6288 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) {
6289 ; CHECK-LABEL: vfnmsub_vv_nxv1f64_commuted:
6291 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6292 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t
6294 %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)
6295 %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)
6296 %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)
6297 ret <vscale x 1 x double> %v
6300 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) {
6301 ; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked:
6303 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6304 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
6306 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6307 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6308 %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)
6309 %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)
6310 %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)
6311 ret <vscale x 1 x double> %v
6314 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) {
6315 ; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked_commuted:
6317 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6318 ; CHECK-NEXT: vfnmadd.vv v8, v9, v10
6320 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6321 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6322 %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)
6323 %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)
6324 %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)
6325 ret <vscale x 1 x double> %v
6328 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) {
6329 ; CHECK-LABEL: vfnmsub_vf_nxv1f64:
6331 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6332 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
6334 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6335 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6336 %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)
6337 %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)
6338 ret <vscale x 1 x double> %v
6341 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) {
6342 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_commute:
6344 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6345 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
6347 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6348 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6349 %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)
6350 %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)
6351 ret <vscale x 1 x double> %v
6354 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) {
6355 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked:
6357 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6358 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
6360 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6361 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6362 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6363 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6364 %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)
6365 %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)
6366 ret <vscale x 1 x double> %v
6369 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) {
6370 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked_commute:
6372 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6373 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
6375 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6376 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6377 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6378 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6379 %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)
6380 %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)
6381 ret <vscale x 1 x double> %v
6384 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) {
6385 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat:
6387 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6388 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
6390 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6391 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6392 %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)
6393 %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)
6394 ret <vscale x 1 x double> %v
6397 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) {
6398 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_commute:
6400 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6401 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t
6403 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6404 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6405 %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)
6406 %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)
6407 ret <vscale x 1 x double> %v
6410 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) {
6411 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked:
6413 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6414 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
6416 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6417 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6418 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6419 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6420 %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)
6421 %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)
6422 ret <vscale x 1 x double> %v
6425 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) {
6426 ; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked_commute:
6428 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
6429 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v9
6431 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
6432 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
6433 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
6434 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
6435 %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)
6436 %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)
6437 ret <vscale x 1 x double> %v
6440 declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
6442 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) {
6443 ; CHECK-LABEL: vfmsub_vv_nxv2f64:
6445 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6446 ; CHECK-NEXT: vfmsub.vv v10, v8, v12, v0.t
6447 ; CHECK-NEXT: vmv.v.v v8, v10
6449 %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)
6450 %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)
6451 ret <vscale x 2 x double> %v
6454 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) {
6455 ; CHECK-LABEL: vfmsub_vv_nxv2f64_unmasked:
6457 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6458 ; CHECK-NEXT: vfmsub.vv v8, v10, v12
6460 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6461 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6462 %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)
6463 %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)
6464 ret <vscale x 2 x double> %v
6467 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) {
6468 ; CHECK-LABEL: vfmsub_vf_nxv2f64:
6470 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6471 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t
6473 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6474 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6475 %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)
6476 %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)
6477 ret <vscale x 2 x double> %v
6480 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) {
6481 ; CHECK-LABEL: vfmsub_vf_nxv2f64_commute:
6483 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6484 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t
6486 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6487 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6488 %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)
6489 %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)
6490 ret <vscale x 2 x double> %v
6493 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) {
6494 ; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked:
6496 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6497 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10
6499 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6500 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6501 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6502 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6503 %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)
6504 %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)
6505 ret <vscale x 2 x double> %v
6508 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) {
6509 ; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked_commute:
6511 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6512 ; CHECK-NEXT: vfmsub.vf v8, fa0, v10
6514 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6515 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6516 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6517 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6518 %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)
6519 %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)
6520 ret <vscale x 2 x double> %v
6523 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) {
6524 ; CHECK-LABEL: vfnmadd_vv_nxv2f64:
6526 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6527 ; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t
6528 ; CHECK-NEXT: vmv.v.v v8, v10
6530 %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)
6531 %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)
6532 %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)
6533 ret <vscale x 2 x double> %v
6536 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) {
6537 ; CHECK-LABEL: vfnmadd_vv_nxv2f64_commuted:
6539 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6540 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t
6542 %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)
6543 %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)
6544 %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)
6545 ret <vscale x 2 x double> %v
6548 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) {
6549 ; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked:
6551 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6552 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
6554 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6555 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6556 %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)
6557 %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)
6558 %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)
6559 ret <vscale x 2 x double> %v
6562 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) {
6563 ; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked_commuted:
6565 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6566 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
6568 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6569 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6570 %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)
6571 %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)
6572 %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)
6573 ret <vscale x 2 x double> %v
6576 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) {
6577 ; CHECK-LABEL: vfnmadd_vf_nxv2f64:
6579 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6580 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
6582 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6583 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6584 %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)
6585 %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)
6586 %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)
6587 ret <vscale x 2 x double> %v
6590 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) {
6591 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_commute:
6593 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6594 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
6596 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6597 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6598 %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)
6599 %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)
6600 %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)
6601 ret <vscale x 2 x double> %v
6604 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) {
6605 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked:
6607 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6608 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
6610 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6611 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6612 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6613 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6614 %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)
6615 %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)
6616 %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)
6617 ret <vscale x 2 x double> %v
6620 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) {
6621 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked_commute:
6623 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6624 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
6626 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6627 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6628 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6629 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6630 %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)
6631 %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)
6632 %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)
6633 ret <vscale x 2 x double> %v
6636 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) {
6637 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat:
6639 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6640 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
6642 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6643 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6644 %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)
6645 %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)
6646 %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)
6647 ret <vscale x 2 x double> %v
6650 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) {
6651 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_commute:
6653 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6654 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t
6656 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6657 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6658 %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)
6659 %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)
6660 %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)
6661 ret <vscale x 2 x double> %v
6664 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) {
6665 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked:
6667 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6668 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
6670 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6671 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6672 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6673 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6674 %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)
6675 %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)
6676 %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)
6677 ret <vscale x 2 x double> %v
6680 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) {
6681 ; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked_commute:
6683 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6684 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v10
6686 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6687 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6688 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6689 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6690 %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)
6691 %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)
6692 %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)
6693 ret <vscale x 2 x double> %v
6696 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) {
6697 ; CHECK-LABEL: vfnmsub_vv_nxv2f64:
6699 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6700 ; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t
6701 ; CHECK-NEXT: vmv.v.v v8, v10
6703 %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)
6704 %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)
6705 %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)
6706 ret <vscale x 2 x double> %v
6709 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) {
6710 ; CHECK-LABEL: vfnmsub_vv_nxv2f64_commuted:
6712 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6713 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t
6715 %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)
6716 %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)
6717 %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)
6718 ret <vscale x 2 x double> %v
6721 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) {
6722 ; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked:
6724 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6725 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
6727 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6728 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6729 %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)
6730 %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)
6731 %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)
6732 ret <vscale x 2 x double> %v
6735 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) {
6736 ; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked_commuted:
6738 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6739 ; CHECK-NEXT: vfnmadd.vv v8, v10, v12
6741 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6742 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6743 %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)
6744 %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)
6745 %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)
6746 ret <vscale x 2 x double> %v
6749 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) {
6750 ; CHECK-LABEL: vfnmsub_vf_nxv2f64:
6752 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6753 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
6755 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6756 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6757 %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)
6758 %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)
6759 ret <vscale x 2 x double> %v
6762 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) {
6763 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_commute:
6765 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6766 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
6768 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6769 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6770 %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)
6771 %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)
6772 ret <vscale x 2 x double> %v
6775 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) {
6776 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked:
6778 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6779 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
6781 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6782 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6783 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6784 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6785 %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)
6786 %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)
6787 ret <vscale x 2 x double> %v
6790 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) {
6791 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked_commute:
6793 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6794 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
6796 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6797 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6798 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6799 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6800 %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)
6801 %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)
6802 ret <vscale x 2 x double> %v
6805 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) {
6806 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat:
6808 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6809 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
6811 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6812 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6813 %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)
6814 %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)
6815 ret <vscale x 2 x double> %v
6818 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) {
6819 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_commute:
6821 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6822 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t
6824 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6825 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6826 %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)
6827 %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)
6828 ret <vscale x 2 x double> %v
6831 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) {
6832 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked:
6834 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6835 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
6837 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6838 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6839 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6840 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6841 %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)
6842 %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)
6843 ret <vscale x 2 x double> %v
6846 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) {
6847 ; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked_commute:
6849 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
6850 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v10
6852 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
6853 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
6854 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
6855 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
6856 %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)
6857 %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)
6858 ret <vscale x 2 x double> %v
6861 declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
6863 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) {
6864 ; CHECK-LABEL: vfmsub_vv_nxv4f64:
6866 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6867 ; CHECK-NEXT: vfmsub.vv v12, v8, v16, v0.t
6868 ; CHECK-NEXT: vmv.v.v v8, v12
6870 %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)
6871 %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)
6872 ret <vscale x 4 x double> %v
6875 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) {
6876 ; CHECK-LABEL: vfmsub_vv_nxv4f64_unmasked:
6878 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6879 ; CHECK-NEXT: vfmsub.vv v8, v12, v16
6881 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
6882 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
6883 %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)
6884 %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)
6885 ret <vscale x 4 x double> %v
6888 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) {
6889 ; CHECK-LABEL: vfmsub_vf_nxv4f64:
6891 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6892 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t
6894 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6895 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6896 %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)
6897 %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)
6898 ret <vscale x 4 x double> %v
6901 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) {
6902 ; CHECK-LABEL: vfmsub_vf_nxv4f64_commute:
6904 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6905 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t
6907 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6908 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6909 %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)
6910 %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)
6911 ret <vscale x 4 x double> %v
6914 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) {
6915 ; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked:
6917 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6918 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12
6920 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6921 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6922 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
6923 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
6924 %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)
6925 %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)
6926 ret <vscale x 4 x double> %v
6929 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) {
6930 ; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked_commute:
6932 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6933 ; CHECK-NEXT: vfmsub.vf v8, fa0, v12
6935 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
6936 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
6937 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
6938 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
6939 %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)
6940 %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)
6941 ret <vscale x 4 x double> %v
6944 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) {
6945 ; CHECK-LABEL: vfnmadd_vv_nxv4f64:
6947 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6948 ; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t
6949 ; CHECK-NEXT: vmv.v.v v8, v12
6951 %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)
6952 %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)
6953 %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)
6954 ret <vscale x 4 x double> %v
6957 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) {
6958 ; CHECK-LABEL: vfnmadd_vv_nxv4f64_commuted:
6960 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6961 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t
6963 %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)
6964 %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)
6965 %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)
6966 ret <vscale x 4 x double> %v
6969 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) {
6970 ; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked:
6972 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6973 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
6975 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
6976 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
6977 %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)
6978 %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)
6979 %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)
6980 ret <vscale x 4 x double> %v
6983 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) {
6984 ; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked_commuted:
6986 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
6987 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
6989 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
6990 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
6991 %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)
6992 %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)
6993 %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)
6994 ret <vscale x 4 x double> %v
6997 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) {
6998 ; CHECK-LABEL: vfnmadd_vf_nxv4f64:
7000 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7001 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
7003 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7004 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7005 %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)
7006 %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)
7007 %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)
7008 ret <vscale x 4 x double> %v
7011 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) {
7012 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_commute:
7014 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7015 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
7017 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7018 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7019 %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)
7020 %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)
7021 %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)
7022 ret <vscale x 4 x double> %v
7025 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) {
7026 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked:
7028 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7029 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
7031 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7032 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7033 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7034 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7035 %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)
7036 %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)
7037 %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)
7038 ret <vscale x 4 x double> %v
7041 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) {
7042 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked_commute:
7044 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7045 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
7047 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7048 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7049 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7050 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7051 %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)
7052 %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)
7053 %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)
7054 ret <vscale x 4 x double> %v
7057 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) {
7058 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat:
7060 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7061 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
7063 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7064 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7065 %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)
7066 %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)
7067 %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)
7068 ret <vscale x 4 x double> %v
7071 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) {
7072 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_commute:
7074 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7075 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t
7077 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7078 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7079 %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)
7080 %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)
7081 %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)
7082 ret <vscale x 4 x double> %v
7085 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) {
7086 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked:
7088 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7089 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
7091 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7092 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7093 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7094 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7095 %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)
7096 %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)
7097 %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)
7098 ret <vscale x 4 x double> %v
7101 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) {
7102 ; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked_commute:
7104 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7105 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v12
7107 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7108 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7109 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7110 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7111 %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)
7112 %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)
7113 %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)
7114 ret <vscale x 4 x double> %v
7117 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) {
7118 ; CHECK-LABEL: vfnmsub_vv_nxv4f64:
7120 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7121 ; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t
7122 ; CHECK-NEXT: vmv.v.v v8, v12
7124 %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)
7125 %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)
7126 %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)
7127 ret <vscale x 4 x double> %v
7130 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) {
7131 ; CHECK-LABEL: vfnmsub_vv_nxv4f64_commuted:
7133 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7134 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t
7136 %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)
7137 %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)
7138 %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)
7139 ret <vscale x 4 x double> %v
7142 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) {
7143 ; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked:
7145 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7146 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
7148 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7149 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7150 %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)
7151 %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)
7152 %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)
7153 ret <vscale x 4 x double> %v
7156 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) {
7157 ; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked_commuted:
7159 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7160 ; CHECK-NEXT: vfnmadd.vv v8, v12, v16
7162 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7163 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7164 %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)
7165 %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)
7166 %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)
7167 ret <vscale x 4 x double> %v
7170 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) {
7171 ; CHECK-LABEL: vfnmsub_vf_nxv4f64:
7173 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7174 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
7176 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7177 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7178 %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)
7179 %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)
7180 ret <vscale x 4 x double> %v
7183 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) {
7184 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_commute:
7186 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7187 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
7189 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7190 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7191 %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)
7192 %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)
7193 ret <vscale x 4 x double> %v
7196 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) {
7197 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked:
7199 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7200 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
7202 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7203 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7204 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7205 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7206 %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)
7207 %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)
7208 ret <vscale x 4 x double> %v
7211 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) {
7212 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked_commute:
7214 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7215 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
7217 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7218 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7219 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7220 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7221 %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)
7222 %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)
7223 ret <vscale x 4 x double> %v
7226 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) {
7227 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat:
7229 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7230 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
7232 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7233 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7234 %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)
7235 %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)
7236 ret <vscale x 4 x double> %v
7239 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) {
7240 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_commute:
7242 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7243 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t
7245 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7246 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7247 %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)
7248 %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)
7249 ret <vscale x 4 x double> %v
7252 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) {
7253 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked:
7255 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7256 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
7258 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7259 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7260 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7261 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7262 %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)
7263 %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)
7264 ret <vscale x 4 x double> %v
7267 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) {
7268 ; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked_commute:
7270 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
7271 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v12
7273 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
7274 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
7275 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
7276 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
7277 %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)
7278 %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)
7279 ret <vscale x 4 x double> %v
7282 declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
7284 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) {
7285 ; CHECK-LABEL: vfmsub_vv_nxv8f64:
7287 ; CHECK-NEXT: vl8re64.v v24, (a0)
7288 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7289 ; CHECK-NEXT: vfmsub.vv v16, v8, v24, v0.t
7290 ; CHECK-NEXT: vmv.v.v v8, v16
7292 %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)
7293 %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)
7294 ret <vscale x 8 x double> %v
7297 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) {
7298 ; CHECK-LABEL: vfmsub_vv_nxv8f64_unmasked:
7300 ; CHECK-NEXT: vl8re64.v v24, (a0)
7301 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7302 ; CHECK-NEXT: vfmsub.vv v8, v16, v24
7304 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7305 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7306 %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)
7307 %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)
7308 ret <vscale x 8 x double> %v
7311 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) {
7312 ; CHECK-LABEL: vfmsub_vf_nxv8f64:
7314 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7315 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t
7317 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7318 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7319 %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)
7320 %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)
7321 ret <vscale x 8 x double> %v
7324 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) {
7325 ; CHECK-LABEL: vfmsub_vf_nxv8f64_commute:
7327 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7328 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t
7330 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7331 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7332 %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)
7333 %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)
7334 ret <vscale x 8 x double> %v
7337 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) {
7338 ; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked:
7340 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7341 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16
7343 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7344 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7345 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7346 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7347 %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)
7348 %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)
7349 ret <vscale x 8 x double> %v
7352 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) {
7353 ; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked_commute:
7355 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7356 ; CHECK-NEXT: vfmsub.vf v8, fa0, v16
7358 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7359 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7360 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7361 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7362 %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)
7363 %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)
7364 ret <vscale x 8 x double> %v
7367 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) {
7368 ; CHECK-LABEL: vfnmadd_vv_nxv8f64:
7370 ; CHECK-NEXT: vl8re64.v v24, (a0)
7371 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7372 ; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t
7373 ; CHECK-NEXT: vmv.v.v v8, v16
7375 %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)
7376 %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)
7377 %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)
7378 ret <vscale x 8 x double> %v
7381 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) {
7382 ; CHECK-LABEL: vfnmadd_vv_nxv8f64_commuted:
7384 ; CHECK-NEXT: vl8re64.v v24, (a0)
7385 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7386 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t
7388 %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)
7389 %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)
7390 %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)
7391 ret <vscale x 8 x double> %v
7394 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) {
7395 ; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked:
7397 ; CHECK-NEXT: vl8re64.v v24, (a0)
7398 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7399 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
7401 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7402 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7403 %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)
7404 %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)
7405 %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)
7406 ret <vscale x 8 x double> %v
7409 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) {
7410 ; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked_commuted:
7412 ; CHECK-NEXT: vl8re64.v v24, (a0)
7413 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7414 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
7416 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7417 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7418 %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)
7419 %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)
7420 %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)
7421 ret <vscale x 8 x double> %v
7424 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) {
7425 ; CHECK-LABEL: vfnmadd_vf_nxv8f64:
7427 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7428 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
7430 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7431 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7432 %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)
7433 %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)
7434 %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)
7435 ret <vscale x 8 x double> %v
7438 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) {
7439 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_commute:
7441 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7442 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
7444 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7445 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7446 %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)
7447 %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)
7448 %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)
7449 ret <vscale x 8 x double> %v
7452 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) {
7453 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked:
7455 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7456 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
7458 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7459 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7460 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7461 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7462 %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)
7463 %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)
7464 %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)
7465 ret <vscale x 8 x double> %v
7468 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) {
7469 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked_commute:
7471 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7472 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
7474 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7475 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7476 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7477 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7478 %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)
7479 %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)
7480 %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)
7481 ret <vscale x 8 x double> %v
7484 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) {
7485 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat:
7487 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7488 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
7490 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7491 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7492 %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)
7493 %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)
7494 %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)
7495 ret <vscale x 8 x double> %v
7498 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) {
7499 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_commute:
7501 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7502 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t
7504 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7505 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7506 %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)
7507 %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)
7508 %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)
7509 ret <vscale x 8 x double> %v
7512 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) {
7513 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked:
7515 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7516 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
7518 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7519 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7520 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7521 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7522 %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)
7523 %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)
7524 %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)
7525 ret <vscale x 8 x double> %v
7528 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) {
7529 ; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked_commute:
7531 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7532 ; CHECK-NEXT: vfnmadd.vf v8, fa0, v16
7534 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7535 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7536 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7537 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7538 %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)
7539 %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)
7540 %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)
7541 ret <vscale x 8 x double> %v
7544 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) {
7545 ; CHECK-LABEL: vfnmsub_vv_nxv8f64:
7547 ; CHECK-NEXT: vl8re64.v v24, (a0)
7548 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7549 ; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t
7550 ; CHECK-NEXT: vmv.v.v v8, v16
7552 %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)
7553 %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)
7554 %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)
7555 ret <vscale x 8 x double> %v
7558 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) {
7559 ; CHECK-LABEL: vfnmsub_vv_nxv8f64_commuted:
7561 ; CHECK-NEXT: vl8re64.v v24, (a0)
7562 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7563 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t
7565 %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)
7566 %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)
7567 %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)
7568 ret <vscale x 8 x double> %v
7571 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) {
7572 ; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked:
7574 ; CHECK-NEXT: vl8re64.v v24, (a0)
7575 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7576 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
7578 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7579 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7580 %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)
7581 %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)
7582 %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)
7583 ret <vscale x 8 x double> %v
7586 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) {
7587 ; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked_commuted:
7589 ; CHECK-NEXT: vl8re64.v v24, (a0)
7590 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
7591 ; CHECK-NEXT: vfnmadd.vv v8, v16, v24
7593 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7594 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7595 %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)
7596 %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)
7597 %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)
7598 ret <vscale x 8 x double> %v
7601 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) {
7602 ; CHECK-LABEL: vfnmsub_vf_nxv8f64:
7604 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7605 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
7607 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7608 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7609 %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)
7610 %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)
7611 ret <vscale x 8 x double> %v
7614 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) {
7615 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_commute:
7617 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7618 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
7620 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7621 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7622 %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)
7623 %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)
7624 ret <vscale x 8 x double> %v
7627 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) {
7628 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked:
7630 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7631 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
7633 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7634 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7635 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7636 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7637 %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)
7638 %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)
7639 ret <vscale x 8 x double> %v
7642 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) {
7643 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked_commute:
7645 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7646 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
7648 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7649 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7650 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7651 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7652 %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)
7653 %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)
7654 ret <vscale x 8 x double> %v
7657 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) {
7658 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat:
7660 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7661 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
7663 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7664 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7665 %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)
7666 %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)
7667 ret <vscale x 8 x double> %v
7670 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) {
7671 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_commute:
7673 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7674 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t
7676 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7677 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7678 %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)
7679 %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)
7680 ret <vscale x 8 x double> %v
7683 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) {
7684 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked:
7686 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7687 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
7689 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7690 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7691 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7692 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7693 %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)
7694 %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)
7695 ret <vscale x 8 x double> %v
7698 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) {
7699 ; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked_commute:
7701 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
7702 ; CHECK-NEXT: vfnmsub.vf v8, fa0, v16
7704 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
7705 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
7706 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
7707 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
7708 %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)
7709 %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)
7710 ret <vscale x 8 x double> %v