Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfma-vp.ll
blobc18602c98e6b877ead87b769d6ea63cf02688a6d
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.fma.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32)
9 define <vscale x 1 x half> @vfma_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vfma_vv_nxv1f16:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
13 ; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
14 ; CHECK-NEXT:    vmv1r.v v8, v9
15 ; CHECK-NEXT:    ret
16   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
17   ret <vscale x 1 x half> %v
20 define <vscale x 1 x half> @vfma_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) {
21 ; CHECK-LABEL: vfma_vv_nxv1f16_unmasked:
22 ; CHECK:       # %bb.0:
23 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
24 ; CHECK-NEXT:    vfmadd.vv v8, v9, v10
25 ; CHECK-NEXT:    ret
26   %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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
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:
34 ; CHECK:       # %bb.0:
35 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
36 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
37 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
46 ; CHECK:       # %bb.0:
47 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
48 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
49 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
58 ; CHECK:       # %bb.0:
59 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
60 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
61 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
72 ; CHECK:       # %bb.0:
73 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
74 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
75 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
81   ret <vscale x 1 x half> %v
84 declare <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32)
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:
88 ; CHECK:       # %bb.0:
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
92 ; CHECK-NEXT:    ret
93   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl)
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:
99 ; CHECK:       # %bb.0:
100 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
101 ; CHECK-NEXT:    vfmadd.vv v8, v9, v10
102 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl)
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:
111 ; CHECK:       # %bb.0:
112 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
113 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
114 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
125 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
126 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
135 ; CHECK:       # %bb.0:
136 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
137 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
138 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
149 ; CHECK:       # %bb.0:
150 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
151 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
152 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
158   ret <vscale x 2 x half> %v
161 declare <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32)
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:
165 ; CHECK:       # %bb.0:
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
169 ; CHECK-NEXT:    ret
170   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl)
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:
176 ; CHECK:       # %bb.0:
177 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
178 ; CHECK-NEXT:    vfmadd.vv v8, v9, v10
179 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl)
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:
188 ; CHECK:       # %bb.0:
189 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
190 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
191 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
200 ; CHECK:       # %bb.0:
201 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
202 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
203 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
212 ; CHECK:       # %bb.0:
213 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
214 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
215 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
226 ; CHECK:       # %bb.0:
227 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
228 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
229 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
235   ret <vscale x 4 x half> %v
238 declare <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32)
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:
242 ; CHECK:       # %bb.0:
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
246 ; CHECK-NEXT:    ret
247   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl)
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:
253 ; CHECK:       # %bb.0:
254 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
255 ; CHECK-NEXT:    vfmadd.vv v8, v10, v12
256 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl)
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:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
267 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
268 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
277 ; CHECK:       # %bb.0:
278 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
279 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
280 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
289 ; CHECK:       # %bb.0:
290 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
291 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
292 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
303 ; CHECK:       # %bb.0:
304 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
305 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
306 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
312   ret <vscale x 8 x half> %v
315 declare <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32)
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:
319 ; CHECK:       # %bb.0:
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
323 ; CHECK-NEXT:    ret
324   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl)
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:
330 ; CHECK:       # %bb.0:
331 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
332 ; CHECK-NEXT:    vfmadd.vv v8, v12, v16
333 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl)
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:
342 ; CHECK:       # %bb.0:
343 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
344 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
345 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
354 ; CHECK:       # %bb.0:
355 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
356 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
357 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
366 ; CHECK:       # %bb.0:
367 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
368 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
369 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
380 ; CHECK:       # %bb.0:
381 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
382 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
383 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
389   ret <vscale x 16 x half> %v
392 declare <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32)
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:
396 ; CHECK:       # %bb.0:
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
401 ; CHECK-NEXT:    ret
402   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl)
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:
408 ; CHECK:       # %bb.0:
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
412 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl)
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:
421 ; CHECK:       # %bb.0:
422 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
423 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
424 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
433 ; CHECK:       # %bb.0:
434 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
435 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
436 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
445 ; CHECK:       # %bb.0:
446 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
447 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
448 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
461 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
462 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
468   ret <vscale x 32 x half> %v
471 declare <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32)
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:
475 ; CHECK:       # %bb.0:
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
479 ; CHECK-NEXT:    ret
480   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
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:
486 ; CHECK:       # %bb.0:
487 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
488 ; CHECK-NEXT:    vfmadd.vv v8, v9, v10
489 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
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:
498 ; CHECK:       # %bb.0:
499 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
500 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
501 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
510 ; CHECK:       # %bb.0:
511 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
512 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
513 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
522 ; CHECK:       # %bb.0:
523 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
524 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
525 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
536 ; CHECK:       # %bb.0:
537 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
538 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
539 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
545   ret <vscale x 1 x float> %v
548 declare <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32)
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:
552 ; CHECK:       # %bb.0:
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
556 ; CHECK-NEXT:    ret
557   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
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:
563 ; CHECK:       # %bb.0:
564 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
565 ; CHECK-NEXT:    vfmadd.vv v8, v9, v10
566 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
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:
575 ; CHECK:       # %bb.0:
576 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
577 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
578 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
587 ; CHECK:       # %bb.0:
588 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
589 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
590 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
599 ; CHECK:       # %bb.0:
600 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
601 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
602 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
613 ; CHECK:       # %bb.0:
614 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
615 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
616 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
622   ret <vscale x 2 x float> %v
625 declare <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32)
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:
629 ; CHECK:       # %bb.0:
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
633 ; CHECK-NEXT:    ret
634   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
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:
640 ; CHECK:       # %bb.0:
641 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
642 ; CHECK-NEXT:    vfmadd.vv v8, v10, v12
643 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
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:
652 ; CHECK:       # %bb.0:
653 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
654 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
655 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
664 ; CHECK:       # %bb.0:
665 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
666 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
667 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
676 ; CHECK:       # %bb.0:
677 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
678 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
679 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
690 ; CHECK:       # %bb.0:
691 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
692 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
693 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
699   ret <vscale x 4 x float> %v
702 declare <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32)
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:
706 ; CHECK:       # %bb.0:
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
710 ; CHECK-NEXT:    ret
711   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
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:
717 ; CHECK:       # %bb.0:
718 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
719 ; CHECK-NEXT:    vfmadd.vv v8, v12, v16
720 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
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:
729 ; CHECK:       # %bb.0:
730 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
731 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
732 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
741 ; CHECK:       # %bb.0:
742 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
743 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
744 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
753 ; CHECK:       # %bb.0:
754 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
755 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
756 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
767 ; CHECK:       # %bb.0:
768 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
769 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
770 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
776   ret <vscale x 8 x float> %v
779 declare <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32)
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:
783 ; CHECK:       # %bb.0:
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
788 ; CHECK-NEXT:    ret
789   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
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:
795 ; CHECK:       # %bb.0:
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
799 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
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:
808 ; CHECK:       # %bb.0:
809 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
810 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
811 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
820 ; CHECK:       # %bb.0:
821 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
822 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
823 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
832 ; CHECK:       # %bb.0:
833 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
834 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
835 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
846 ; CHECK:       # %bb.0:
847 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
848 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
849 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
855   ret <vscale x 16 x float> %v
858 declare <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32)
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:
862 ; CHECK:       # %bb.0:
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
866 ; CHECK-NEXT:    ret
867   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
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:
873 ; CHECK:       # %bb.0:
874 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
875 ; CHECK-NEXT:    vfmadd.vv v8, v9, v10
876 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
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:
885 ; CHECK:       # %bb.0:
886 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
887 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
888 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
897 ; CHECK:       # %bb.0:
898 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
899 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t
900 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
911 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
912 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
923 ; CHECK:       # %bb.0:
924 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
925 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v9
926 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
932   ret <vscale x 1 x double> %v
935 declare <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32)
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:
939 ; CHECK:       # %bb.0:
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
943 ; CHECK-NEXT:    ret
944   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
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:
950 ; CHECK:       # %bb.0:
951 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
952 ; CHECK-NEXT:    vfmadd.vv v8, v10, v12
953 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
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:
962 ; CHECK:       # %bb.0:
963 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
964 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
965 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
974 ; CHECK:       # %bb.0:
975 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
976 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t
977 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
986 ; CHECK:       # %bb.0:
987 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
988 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
989 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
1000 ; CHECK:       # %bb.0:
1001 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1002 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v10
1003 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
1009   ret <vscale x 2 x double> %v
1012 declare <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32)
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:
1016 ; CHECK:       # %bb.0:
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
1020 ; CHECK-NEXT:    ret
1021   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
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:
1027 ; CHECK:       # %bb.0:
1028 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1029 ; CHECK-NEXT:    vfmadd.vv v8, v12, v16
1030 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
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:
1039 ; CHECK:       # %bb.0:
1040 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1041 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
1042 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
1051 ; CHECK:       # %bb.0:
1052 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1053 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t
1054 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
1063 ; CHECK:       # %bb.0:
1064 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1065 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
1066 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
1077 ; CHECK:       # %bb.0:
1078 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1079 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v12
1080 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
1086   ret <vscale x 4 x double> %v
1089 declare <vscale x 7 x double> @llvm.vp.fma.nxv7f64(<vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x i1>, i32)
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:
1093 ; CHECK:       # %bb.0:
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
1098 ; CHECK-NEXT:    ret
1099   %v = call <vscale x 7 x double> @llvm.vp.fma.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, <vscale x 7 x i1> %m, i32 %evl)
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:
1105 ; CHECK:       # %bb.0:
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
1109 ; CHECK-NEXT:    ret
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.fma.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, <vscale x 7 x i1> %m, i32 %evl)
1113   ret <vscale x 7 x double> %v
1116 declare <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32)
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:
1120 ; CHECK:       # %bb.0:
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
1125 ; CHECK-NEXT:    ret
1126   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
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:
1132 ; CHECK:       # %bb.0:
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
1136 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
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:
1145 ; CHECK:       # %bb.0:
1146 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1147 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
1148 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
1157 ; CHECK:       # %bb.0:
1158 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1159 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t
1160 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
1169 ; CHECK:       # %bb.0:
1170 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1171 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
1172 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
1183 ; CHECK:       # %bb.0:
1184 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1185 ; CHECK-NEXT:    vfmadd.vf v8, fa0, v16
1186 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
1192   ret <vscale x 8 x double> %v
1195 declare <vscale x 16 x double> @llvm.vp.fma.nxv16f64(<vscale x 16 x double>, <vscale x 16 x double>, <vscale x 16 x double>, <vscale x 16 x i1>, i32)
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:
1199 ; CHECK:       # %bb.0:
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
1296 ; CHECK-NEXT:    ret
1297   %v = call <vscale x 16 x double> @llvm.vp.fma.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, <vscale x 16 x i1> %m, i32 %evl)
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:
1303 ; CHECK:       # %bb.0:
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
1361 ; CHECK-NEXT:    ret
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.fma.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, <vscale x 16 x i1> %m, i32 %evl)
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:
1372 ; CHECK:       # %bb.0:
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
1376 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1384 ; CHECK:       # %bb.0:
1385 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1386 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
1387 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1397 ; CHECK:       # %bb.0:
1398 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1399 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1400 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1410 ; CHECK:       # %bb.0:
1411 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1412 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1413 ; CHECK-NEXT:    ret
1414   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
1415   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
1416   %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.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1423 ; CHECK:       # %bb.0:
1424 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1425 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
1426 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1438 ; CHECK:       # %bb.0:
1439 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1440 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
1441 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1453 ; CHECK:       # %bb.0:
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
1457 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1466 ; CHECK:       # %bb.0:
1467 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1468 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1469 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1478 ; CHECK:       # %bb.0:
1479 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1480 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1481 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1492 ; CHECK:       # %bb.0:
1493 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1494 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1495 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1506 ; CHECK:       # %bb.0:
1507 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1508 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1509 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1520 ; CHECK:       # %bb.0:
1521 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1522 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1523 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1534 ; CHECK:       # %bb.0:
1535 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1536 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1537 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1550 ; CHECK:       # %bb.0:
1551 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1552 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1553 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1566 ; CHECK:       # %bb.0:
1567 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1568 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1569 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1580 ; CHECK:       # %bb.0:
1581 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1582 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1583 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1594 ; CHECK:       # %bb.0:
1595 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1596 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1597 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1610 ; CHECK:       # %bb.0:
1611 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1612 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1613 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
1626 ; CHECK:       # %bb.0:
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
1630 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1639 ; CHECK:       # %bb.0:
1640 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1641 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1642 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1651 ; CHECK:       # %bb.0:
1652 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1653 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1654 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1665 ; CHECK:       # %bb.0:
1666 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1667 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1668 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
1679 ; CHECK:       # %bb.0:
1680 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1681 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1682 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
1692 ; CHECK:       # %bb.0:
1693 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1694 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1695 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
1705 ; CHECK:       # %bb.0:
1706 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1707 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
1708 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
1720 ; CHECK:       # %bb.0:
1721 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1722 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
1723 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
1735 ; CHECK:       # %bb.0:
1736 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1737 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1738 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
1748 ; CHECK:       # %bb.0:
1749 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1750 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
1751 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
1761 ; CHECK:       # %bb.0:
1762 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1763 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
1764 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
1776 ; CHECK:       # %bb.0:
1777 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1778 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
1779 ; CHECK-NEXT:    ret
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.fma.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
1793 ; CHECK:       # %bb.0:
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
1797 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
1805 ; CHECK:       # %bb.0:
1806 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1807 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
1808 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
1818 ; CHECK:       # %bb.0:
1819 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1820 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1821 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
1831 ; CHECK:       # %bb.0:
1832 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1833 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
1834 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
1844 ; CHECK:       # %bb.0:
1845 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1846 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
1847 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
1859 ; CHECK:       # %bb.0:
1860 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1861 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
1862 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
1874 ; CHECK:       # %bb.0:
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
1878 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
1887 ; CHECK:       # %bb.0:
1888 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1889 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
1890 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
1899 ; CHECK:       # %bb.0:
1900 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1901 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1902 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
1913 ; CHECK:       # %bb.0:
1914 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1915 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
1916 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
1927 ; CHECK:       # %bb.0:
1928 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1929 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1930 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
1941 ; CHECK:       # %bb.0:
1942 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1943 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1944 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
1955 ; CHECK:       # %bb.0:
1956 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1957 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1958 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
1971 ; CHECK:       # %bb.0:
1972 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1973 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
1974 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
1987 ; CHECK:       # %bb.0:
1988 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1989 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
1990 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
2001 ; CHECK:       # %bb.0:
2002 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2003 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2004 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
2015 ; CHECK:       # %bb.0:
2016 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2017 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2018 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
2031 ; CHECK:       # %bb.0:
2032 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2033 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2034 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
2047 ; CHECK:       # %bb.0:
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
2051 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
2060 ; CHECK:       # %bb.0:
2061 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2062 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
2063 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
2072 ; CHECK:       # %bb.0:
2073 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2074 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2075 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
2086 ; CHECK:       # %bb.0:
2087 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2088 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2089 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
2100 ; CHECK:       # %bb.0:
2101 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2102 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2103 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
2113 ; CHECK:       # %bb.0:
2114 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2115 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2116 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
2126 ; CHECK:       # %bb.0:
2127 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2128 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2129 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
2141 ; CHECK:       # %bb.0:
2142 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2143 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2144 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
2156 ; CHECK:       # %bb.0:
2157 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2158 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2159 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
2169 ; CHECK:       # %bb.0:
2170 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2171 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2172 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
2182 ; CHECK:       # %bb.0:
2183 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2184 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2185 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
2197 ; CHECK:       # %bb.0:
2198 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
2199 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2200 ; CHECK-NEXT:    ret
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.fma.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
2214 ; CHECK:       # %bb.0:
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
2218 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2226 ; CHECK:       # %bb.0:
2227 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2228 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
2229 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2239 ; CHECK:       # %bb.0:
2240 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2241 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
2242 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2252 ; CHECK:       # %bb.0:
2253 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2254 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
2255 ; CHECK-NEXT:    ret
2256   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2257   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2258   %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.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2265 ; CHECK:       # %bb.0:
2266 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2267 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
2268 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2280 ; CHECK:       # %bb.0:
2281 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2282 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
2283 ; CHECK-NEXT:    ret
2284   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2285   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2286   %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.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2295 ; CHECK:       # %bb.0:
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
2299 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2308 ; CHECK:       # %bb.0:
2309 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2310 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
2311 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2320 ; CHECK:       # %bb.0:
2321 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2322 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2323 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2334 ; CHECK:       # %bb.0:
2335 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2336 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2337 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2348 ; CHECK:       # %bb.0:
2349 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2350 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2351 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2362 ; CHECK:       # %bb.0:
2363 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2364 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2365 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2376 ; CHECK:       # %bb.0:
2377 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2378 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2379 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2392 ; CHECK:       # %bb.0:
2393 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2394 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2395 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2408 ; CHECK:       # %bb.0:
2409 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2410 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2411 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2422 ; CHECK:       # %bb.0:
2423 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2424 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
2425 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2436 ; CHECK:       # %bb.0:
2437 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2438 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2439 ; CHECK-NEXT:    ret
2440   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
2441   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
2442   %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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2452 ; CHECK:       # %bb.0:
2453 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2454 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
2455 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
2468 ; CHECK:       # %bb.0:
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
2472 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2481 ; CHECK:       # %bb.0:
2482 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2483 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
2484 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2493 ; CHECK:       # %bb.0:
2494 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2495 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2496 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2507 ; CHECK:       # %bb.0:
2508 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2509 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
2510 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
2521 ; CHECK:       # %bb.0:
2522 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2523 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2524 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
2534 ; CHECK:       # %bb.0:
2535 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2536 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2537 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
2547 ; CHECK:       # %bb.0:
2548 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2549 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2550 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
2562 ; CHECK:       # %bb.0:
2563 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2564 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2565 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
2577 ; CHECK:       # %bb.0:
2578 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2579 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2580 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
2590 ; CHECK:       # %bb.0:
2591 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2592 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
2593 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
2603 ; CHECK:       # %bb.0:
2604 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2605 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2606 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
2618 ; CHECK:       # %bb.0:
2619 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
2620 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
2621 ; CHECK-NEXT:    ret
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.fma.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
2635 ; CHECK:       # %bb.0:
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
2639 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2647 ; CHECK:       # %bb.0:
2648 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2649 ; CHECK-NEXT:    vfmsub.vv v8, v10, v12
2650 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2660 ; CHECK:       # %bb.0:
2661 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2662 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
2663 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2673 ; CHECK:       # %bb.0:
2674 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2675 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
2676 ; CHECK-NEXT:    ret
2677   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2678   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2679   %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.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2686 ; CHECK:       # %bb.0:
2687 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2688 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
2689 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2701 ; CHECK:       # %bb.0:
2702 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2703 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
2704 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2716 ; CHECK:       # %bb.0:
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
2720 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2729 ; CHECK:       # %bb.0:
2730 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2731 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
2732 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2741 ; CHECK:       # %bb.0:
2742 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2743 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2744 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2755 ; CHECK:       # %bb.0:
2756 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2757 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2758 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2769 ; CHECK:       # %bb.0:
2770 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2771 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2772 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2783 ; CHECK:       # %bb.0:
2784 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2785 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2786 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2797 ; CHECK:       # %bb.0:
2798 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2799 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2800 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2813 ; CHECK:       # %bb.0:
2814 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2815 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2816 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2829 ; CHECK:       # %bb.0:
2830 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2831 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2832 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2843 ; CHECK:       # %bb.0:
2844 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2845 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
2846 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2857 ; CHECK:       # %bb.0:
2858 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2859 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2860 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2873 ; CHECK:       # %bb.0:
2874 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2875 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
2876 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
2889 ; CHECK:       # %bb.0:
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
2893 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2902 ; CHECK:       # %bb.0:
2903 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2904 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
2905 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2914 ; CHECK:       # %bb.0:
2915 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2916 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2917 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2928 ; CHECK:       # %bb.0:
2929 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2930 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
2931 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
2942 ; CHECK:       # %bb.0:
2943 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2944 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
2945 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
2955 ; CHECK:       # %bb.0:
2956 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2957 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
2958 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
2968 ; CHECK:       # %bb.0:
2969 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2970 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
2971 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
2983 ; CHECK:       # %bb.0:
2984 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
2985 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
2986 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
2998 ; CHECK:       # %bb.0:
2999 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
3000 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
3001 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
3011 ; CHECK:       # %bb.0:
3012 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
3013 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
3014 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
3024 ; CHECK:       # %bb.0:
3025 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
3026 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
3027 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
3039 ; CHECK:       # %bb.0:
3040 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
3041 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
3042 ; CHECK-NEXT:    ret
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.fma.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
3056 ; CHECK:       # %bb.0:
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
3060 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3068 ; CHECK:       # %bb.0:
3069 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3070 ; CHECK-NEXT:    vfmsub.vv v8, v12, v16
3071 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3081 ; CHECK:       # %bb.0:
3082 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3083 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
3084 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3094 ; CHECK:       # %bb.0:
3095 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3096 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
3097 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3107 ; CHECK:       # %bb.0:
3108 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3109 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
3110 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3122 ; CHECK:       # %bb.0:
3123 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3124 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
3125 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3137 ; CHECK:       # %bb.0:
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
3141 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3150 ; CHECK:       # %bb.0:
3151 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3152 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
3153 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3162 ; CHECK:       # %bb.0:
3163 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3164 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
3165 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3176 ; CHECK:       # %bb.0:
3177 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3178 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
3179 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3190 ; CHECK:       # %bb.0:
3191 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3192 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3193 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3204 ; CHECK:       # %bb.0:
3205 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3206 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3207 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3218 ; CHECK:       # %bb.0:
3219 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3220 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3221 ; CHECK-NEXT:    ret
3222   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
3223   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
3224   %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.fma.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3234 ; CHECK:       # %bb.0:
3235 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3236 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3237 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3250 ; CHECK:       # %bb.0:
3251 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3252 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3253 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3264 ; CHECK:       # %bb.0:
3265 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3266 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
3267 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3278 ; CHECK:       # %bb.0:
3279 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3280 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3281 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3294 ; CHECK:       # %bb.0:
3295 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3296 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
3297 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
3310 ; CHECK:       # %bb.0:
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
3314 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3323 ; CHECK:       # %bb.0:
3324 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3325 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
3326 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3335 ; CHECK:       # %bb.0:
3336 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3337 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
3338 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3349 ; CHECK:       # %bb.0:
3350 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3351 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
3352 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
3363 ; CHECK:       # %bb.0:
3364 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3365 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3366 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
3376 ; CHECK:       # %bb.0:
3377 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3378 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3379 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
3389 ; CHECK:       # %bb.0:
3390 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3391 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
3392 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
3404 ; CHECK:       # %bb.0:
3405 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3406 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
3407 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
3419 ; CHECK:       # %bb.0:
3420 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3421 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3422 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
3432 ; CHECK:       # %bb.0:
3433 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3434 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
3435 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
3445 ; CHECK:       # %bb.0:
3446 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3447 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
3448 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
3460 ; CHECK:       # %bb.0:
3461 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3462 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
3463 ; CHECK-NEXT:    ret
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.fma.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
3477 ; CHECK:       # %bb.0:
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
3482 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3490 ; CHECK:       # %bb.0:
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
3494 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3504 ; CHECK:       # %bb.0:
3505 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3506 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
3507 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3517 ; CHECK:       # %bb.0:
3518 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3519 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
3520 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3530 ; CHECK:       # %bb.0:
3531 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3532 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
3533 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3545 ; CHECK:       # %bb.0:
3546 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3547 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
3548 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3560 ; CHECK:       # %bb.0:
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
3565 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3574 ; CHECK:       # %bb.0:
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
3578 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3587 ; CHECK:       # %bb.0:
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
3591 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3602 ; CHECK:       # %bb.0:
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
3606 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3617 ; CHECK:       # %bb.0:
3618 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3619 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3620 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3631 ; CHECK:       # %bb.0:
3632 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3633 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3634 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3645 ; CHECK:       # %bb.0:
3646 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3647 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3648 ; CHECK-NEXT:    ret
3649   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
3650   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
3651   %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.fma.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3661 ; CHECK:       # %bb.0:
3662 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3663 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3664 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3677 ; CHECK:       # %bb.0:
3678 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3679 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3680 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3691 ; CHECK:       # %bb.0:
3692 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3693 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
3694 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3705 ; CHECK:       # %bb.0:
3706 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3707 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3708 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3721 ; CHECK:       # %bb.0:
3722 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3723 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
3724 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl)
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:
3737 ; CHECK:       # %bb.0:
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
3742 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3751 ; CHECK:       # %bb.0:
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
3755 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3764 ; CHECK:       # %bb.0:
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
3768 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3779 ; CHECK:       # %bb.0:
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
3783 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl)
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:
3794 ; CHECK:       # %bb.0:
3795 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3796 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3797 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
3807 ; CHECK:       # %bb.0:
3808 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3809 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3810 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
3820 ; CHECK:       # %bb.0:
3821 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3822 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
3823 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
3835 ; CHECK:       # %bb.0:
3836 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3837 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
3838 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
3850 ; CHECK:       # %bb.0:
3851 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3852 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3853 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
3863 ; CHECK:       # %bb.0:
3864 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3865 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
3866 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
3876 ; CHECK:       # %bb.0:
3877 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3878 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
3879 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
3891 ; CHECK:       # %bb.0:
3892 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3893 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
3894 ; CHECK-NEXT:    ret
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.fma.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl)
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:
3908 ; CHECK:       # %bb.0:
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
3912 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
3920 ; CHECK:       # %bb.0:
3921 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3922 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
3923 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
3933 ; CHECK:       # %bb.0:
3934 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3935 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
3936 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
3946 ; CHECK:       # %bb.0:
3947 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3948 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
3949 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
3959 ; CHECK:       # %bb.0:
3960 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3961 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
3962 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
3974 ; CHECK:       # %bb.0:
3975 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
3976 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
3977 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
3989 ; CHECK:       # %bb.0:
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
3993 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
4002 ; CHECK:       # %bb.0:
4003 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4004 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4005 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
4014 ; CHECK:       # %bb.0:
4015 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4016 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4017 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
4028 ; CHECK:       # %bb.0:
4029 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4030 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4031 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
4042 ; CHECK:       # %bb.0:
4043 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4044 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4045 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
4056 ; CHECK:       # %bb.0:
4057 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4058 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4059 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
4070 ; CHECK:       # %bb.0:
4071 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4072 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4073 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
4086 ; CHECK:       # %bb.0:
4087 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4088 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4089 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
4102 ; CHECK:       # %bb.0:
4103 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4104 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4105 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
4116 ; CHECK:       # %bb.0:
4117 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4118 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4119 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
4130 ; CHECK:       # %bb.0:
4131 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4132 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4133 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
4146 ; CHECK:       # %bb.0:
4147 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4148 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4149 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
4162 ; CHECK:       # %bb.0:
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
4166 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
4175 ; CHECK:       # %bb.0:
4176 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4177 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4178 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
4187 ; CHECK:       # %bb.0:
4188 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4189 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4190 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
4201 ; CHECK:       # %bb.0:
4202 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4203 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4204 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
4215 ; CHECK:       # %bb.0:
4216 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4217 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4218 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
4228 ; CHECK:       # %bb.0:
4229 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4230 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4231 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
4241 ; CHECK:       # %bb.0:
4242 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4243 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4244 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
4256 ; CHECK:       # %bb.0:
4257 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4258 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4259 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
4271 ; CHECK:       # %bb.0:
4272 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4273 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4274 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
4284 ; CHECK:       # %bb.0:
4285 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4286 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4287 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
4297 ; CHECK:       # %bb.0:
4298 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4299 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4300 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
4312 ; CHECK:       # %bb.0:
4313 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4314 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4315 ; CHECK-NEXT:    ret
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.fma.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
4329 ; CHECK:       # %bb.0:
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
4333 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4341 ; CHECK:       # %bb.0:
4342 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4343 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
4344 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4354 ; CHECK:       # %bb.0:
4355 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4356 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
4357 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4367 ; CHECK:       # %bb.0:
4368 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4369 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
4370 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4380 ; CHECK:       # %bb.0:
4381 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4382 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
4383 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4395 ; CHECK:       # %bb.0:
4396 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4397 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
4398 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4410 ; CHECK:       # %bb.0:
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
4414 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4423 ; CHECK:       # %bb.0:
4424 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4425 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4426 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4435 ; CHECK:       # %bb.0:
4436 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4437 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4438 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4449 ; CHECK:       # %bb.0:
4450 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4451 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4452 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4463 ; CHECK:       # %bb.0:
4464 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4465 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4466 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4477 ; CHECK:       # %bb.0:
4478 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4479 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4480 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4491 ; CHECK:       # %bb.0:
4492 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4493 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4494 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4507 ; CHECK:       # %bb.0:
4508 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4509 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4510 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4523 ; CHECK:       # %bb.0:
4524 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4525 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4526 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4537 ; CHECK:       # %bb.0:
4538 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4539 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
4540 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4551 ; CHECK:       # %bb.0:
4552 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4553 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4554 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4567 ; CHECK:       # %bb.0:
4568 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4569 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
4570 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
4583 ; CHECK:       # %bb.0:
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
4587 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4596 ; CHECK:       # %bb.0:
4597 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4598 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
4599 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4608 ; CHECK:       # %bb.0:
4609 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4610 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4611 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4622 ; CHECK:       # %bb.0:
4623 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4624 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
4625 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
4636 ; CHECK:       # %bb.0:
4637 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4638 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4639 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
4649 ; CHECK:       # %bb.0:
4650 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4651 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4652 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
4662 ; CHECK:       # %bb.0:
4663 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4664 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4665 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
4677 ; CHECK:       # %bb.0:
4678 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4679 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4680 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
4692 ; CHECK:       # %bb.0:
4693 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4694 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4695 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
4705 ; CHECK:       # %bb.0:
4706 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4707 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
4708 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
4718 ; CHECK:       # %bb.0:
4719 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4720 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4721 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
4733 ; CHECK:       # %bb.0:
4734 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4735 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
4736 ; CHECK-NEXT:    ret
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.fma.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
4750 ; CHECK:       # %bb.0:
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
4754 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
4762 ; CHECK:       # %bb.0:
4763 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4764 ; CHECK-NEXT:    vfmsub.vv v8, v10, v12
4765 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
4775 ; CHECK:       # %bb.0:
4776 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4777 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
4778 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4788 ; CHECK:       # %bb.0:
4789 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4790 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
4791 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4801 ; CHECK:       # %bb.0:
4802 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4803 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
4804 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4816 ; CHECK:       # %bb.0:
4817 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4818 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
4819 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4831 ; CHECK:       # %bb.0:
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
4835 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
4844 ; CHECK:       # %bb.0:
4845 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4846 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
4847 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
4856 ; CHECK:       # %bb.0:
4857 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4858 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4859 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
4870 ; CHECK:       # %bb.0:
4871 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4872 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
4873 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
4884 ; CHECK:       # %bb.0:
4885 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4886 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4887 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4898 ; CHECK:       # %bb.0:
4899 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4900 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4901 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4912 ; CHECK:       # %bb.0:
4913 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4914 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4915 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4928 ; CHECK:       # %bb.0:
4929 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4930 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4931 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4944 ; CHECK:       # %bb.0:
4945 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4946 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4947 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4958 ; CHECK:       # %bb.0:
4959 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4960 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
4961 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4972 ; CHECK:       # %bb.0:
4973 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4974 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4975 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
4988 ; CHECK:       # %bb.0:
4989 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4990 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
4991 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
5004 ; CHECK:       # %bb.0:
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
5008 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
5017 ; CHECK:       # %bb.0:
5018 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5019 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
5020 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
5029 ; CHECK:       # %bb.0:
5030 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5031 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
5032 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
5043 ; CHECK:       # %bb.0:
5044 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5045 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
5046 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
5057 ; CHECK:       # %bb.0:
5058 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5059 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
5060 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
5070 ; CHECK:       # %bb.0:
5071 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5072 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
5073 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
5083 ; CHECK:       # %bb.0:
5084 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5085 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
5086 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
5098 ; CHECK:       # %bb.0:
5099 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5100 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
5101 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
5113 ; CHECK:       # %bb.0:
5114 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5115 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
5116 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
5126 ; CHECK:       # %bb.0:
5127 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5128 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
5129 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
5139 ; CHECK:       # %bb.0:
5140 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5141 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
5142 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
5154 ; CHECK:       # %bb.0:
5155 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
5156 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
5157 ; CHECK-NEXT:    ret
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.fma.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
5171 ; CHECK:       # %bb.0:
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
5175 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5183 ; CHECK:       # %bb.0:
5184 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5185 ; CHECK-NEXT:    vfmsub.vv v8, v12, v16
5186 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5196 ; CHECK:       # %bb.0:
5197 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5198 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
5199 ; CHECK-NEXT:    ret
5200   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5201   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5202   %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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5209 ; CHECK:       # %bb.0:
5210 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5211 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
5212 ; CHECK-NEXT:    ret
5213   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
5214   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
5215   %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.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5222 ; CHECK:       # %bb.0:
5223 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5224 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
5225 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5237 ; CHECK:       # %bb.0:
5238 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5239 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
5240 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5252 ; CHECK:       # %bb.0:
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
5256 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5265 ; CHECK:       # %bb.0:
5266 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5267 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
5268 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5277 ; CHECK:       # %bb.0:
5278 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5279 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
5280 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5291 ; CHECK:       # %bb.0:
5292 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5293 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
5294 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5305 ; CHECK:       # %bb.0:
5306 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5307 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
5308 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5319 ; CHECK:       # %bb.0:
5320 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5321 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
5322 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5333 ; CHECK:       # %bb.0:
5334 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5335 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5336 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5349 ; CHECK:       # %bb.0:
5350 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5351 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5352 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5365 ; CHECK:       # %bb.0:
5366 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5367 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
5368 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5379 ; CHECK:       # %bb.0:
5380 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5381 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
5382 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5393 ; CHECK:       # %bb.0:
5394 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5395 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5396 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5409 ; CHECK:       # %bb.0:
5410 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5411 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
5412 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
5425 ; CHECK:       # %bb.0:
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
5429 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5438 ; CHECK:       # %bb.0:
5439 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5440 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
5441 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5450 ; CHECK:       # %bb.0:
5451 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5452 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
5453 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5464 ; CHECK:       # %bb.0:
5465 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5466 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
5467 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
5478 ; CHECK:       # %bb.0:
5479 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5480 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5481 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
5491 ; CHECK:       # %bb.0:
5492 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5493 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5494 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
5504 ; CHECK:       # %bb.0:
5505 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5506 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
5507 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
5519 ; CHECK:       # %bb.0:
5520 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5521 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
5522 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
5534 ; CHECK:       # %bb.0:
5535 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5536 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5537 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
5547 ; CHECK:       # %bb.0:
5548 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5549 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
5550 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
5560 ; CHECK:       # %bb.0:
5561 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5562 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
5563 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
5575 ; CHECK:       # %bb.0:
5576 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
5577 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
5578 ; CHECK-NEXT:    ret
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.fma.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
5592 ; CHECK:       # %bb.0:
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
5597 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5605 ; CHECK:       # %bb.0:
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
5609 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5619 ; CHECK:       # %bb.0:
5620 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5621 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
5622 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5632 ; CHECK:       # %bb.0:
5633 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5634 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
5635 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5645 ; CHECK:       # %bb.0:
5646 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5647 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
5648 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5660 ; CHECK:       # %bb.0:
5661 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5662 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
5663 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5675 ; CHECK:       # %bb.0:
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
5680 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5689 ; CHECK:       # %bb.0:
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
5693 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5702 ; CHECK:       # %bb.0:
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
5706 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5717 ; CHECK:       # %bb.0:
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
5721 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5732 ; CHECK:       # %bb.0:
5733 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5734 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5735 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5746 ; CHECK:       # %bb.0:
5747 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5748 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5749 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5760 ; CHECK:       # %bb.0:
5761 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5762 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5763 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5776 ; CHECK:       # %bb.0:
5777 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5778 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5779 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5792 ; CHECK:       # %bb.0:
5793 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5794 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5795 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5806 ; CHECK:       # %bb.0:
5807 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5808 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
5809 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5820 ; CHECK:       # %bb.0:
5821 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5822 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5823 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5836 ; CHECK:       # %bb.0:
5837 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5838 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
5839 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl)
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:
5852 ; CHECK:       # %bb.0:
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
5857 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5866 ; CHECK:       # %bb.0:
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
5870 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5879 ; CHECK:       # %bb.0:
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
5883 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5894 ; CHECK:       # %bb.0:
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
5898 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl)
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:
5909 ; CHECK:       # %bb.0:
5910 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5911 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5912 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
5922 ; CHECK:       # %bb.0:
5923 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5924 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5925 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
5935 ; CHECK:       # %bb.0:
5936 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5937 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
5938 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
5950 ; CHECK:       # %bb.0:
5951 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5952 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
5953 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
5965 ; CHECK:       # %bb.0:
5966 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5967 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5968 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
5978 ; CHECK:       # %bb.0:
5979 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5980 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
5981 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
5991 ; CHECK:       # %bb.0:
5992 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
5993 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
5994 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
6006 ; CHECK:       # %bb.0:
6007 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
6008 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
6009 ; CHECK-NEXT:    ret
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.fma.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl)
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:
6023 ; CHECK:       # %bb.0:
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
6027 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6035 ; CHECK:       # %bb.0:
6036 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6037 ; CHECK-NEXT:    vfmsub.vv v8, v9, v10
6038 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6048 ; CHECK:       # %bb.0:
6049 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6050 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
6051 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6061 ; CHECK:       # %bb.0:
6062 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6063 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9, v0.t
6064 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6074 ; CHECK:       # %bb.0:
6075 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6076 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
6077 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6089 ; CHECK:       # %bb.0:
6090 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6091 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v9
6092 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6104 ; CHECK:       # %bb.0:
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
6108 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6117 ; CHECK:       # %bb.0:
6118 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6119 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
6120 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6129 ; CHECK:       # %bb.0:
6130 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6131 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
6132 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6143 ; CHECK:       # %bb.0:
6144 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6145 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
6146 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6157 ; CHECK:       # %bb.0:
6158 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6159 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
6160 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6171 ; CHECK:       # %bb.0:
6172 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6173 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
6174 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6185 ; CHECK:       # %bb.0:
6186 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6187 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
6188 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6201 ; CHECK:       # %bb.0:
6202 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6203 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
6204 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6217 ; CHECK:       # %bb.0:
6218 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6219 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
6220 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6231 ; CHECK:       # %bb.0:
6232 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6233 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9, v0.t
6234 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6245 ; CHECK:       # %bb.0:
6246 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6247 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
6248 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6261 ; CHECK:       # %bb.0:
6262 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6263 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v9
6264 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl)
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:
6277 ; CHECK:       # %bb.0:
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
6281 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6290 ; CHECK:       # %bb.0:
6291 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6292 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10, v0.t
6293 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6302 ; CHECK:       # %bb.0:
6303 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6304 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
6305 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6316 ; CHECK:       # %bb.0:
6317 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6318 ; CHECK-NEXT:    vfnmadd.vv v8, v9, v10
6319 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl)
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:
6330 ; CHECK:       # %bb.0:
6331 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6332 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
6333 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
6343 ; CHECK:       # %bb.0:
6344 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6345 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
6346 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
6356 ; CHECK:       # %bb.0:
6357 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6358 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
6359 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
6371 ; CHECK:       # %bb.0:
6372 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6373 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
6374 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
6386 ; CHECK:       # %bb.0:
6387 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6388 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
6389 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
6399 ; CHECK:       # %bb.0:
6400 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6401 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9, v0.t
6402 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
6412 ; CHECK:       # %bb.0:
6413 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6414 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
6415 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
6427 ; CHECK:       # %bb.0:
6428 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
6429 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9
6430 ; CHECK-NEXT:    ret
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.fma.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl)
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:
6444 ; CHECK:       # %bb.0:
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
6448 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6456 ; CHECK:       # %bb.0:
6457 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6458 ; CHECK-NEXT:    vfmsub.vv v8, v10, v12
6459 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6469 ; CHECK:       # %bb.0:
6470 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6471 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
6472 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6482 ; CHECK:       # %bb.0:
6483 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6484 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10, v0.t
6485 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6495 ; CHECK:       # %bb.0:
6496 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6497 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
6498 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6510 ; CHECK:       # %bb.0:
6511 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6512 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v10
6513 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6525 ; CHECK:       # %bb.0:
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
6529 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6538 ; CHECK:       # %bb.0:
6539 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6540 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
6541 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6550 ; CHECK:       # %bb.0:
6551 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6552 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6553 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6564 ; CHECK:       # %bb.0:
6565 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6566 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6567 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6578 ; CHECK:       # %bb.0:
6579 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6580 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6581 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6592 ; CHECK:       # %bb.0:
6593 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6594 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6595 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6606 ; CHECK:       # %bb.0:
6607 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6608 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6609 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6622 ; CHECK:       # %bb.0:
6623 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6624 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6625 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6638 ; CHECK:       # %bb.0:
6639 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6640 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6641 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6652 ; CHECK:       # %bb.0:
6653 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6654 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10, v0.t
6655 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6666 ; CHECK:       # %bb.0:
6667 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6668 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6669 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6682 ; CHECK:       # %bb.0:
6683 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6684 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v10
6685 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl)
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:
6698 ; CHECK:       # %bb.0:
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
6702 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6711 ; CHECK:       # %bb.0:
6712 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6713 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12, v0.t
6714 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6723 ; CHECK:       # %bb.0:
6724 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6725 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6726 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6737 ; CHECK:       # %bb.0:
6738 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6739 ; CHECK-NEXT:    vfnmadd.vv v8, v10, v12
6740 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl)
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:
6751 ; CHECK:       # %bb.0:
6752 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6753 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6754 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
6764 ; CHECK:       # %bb.0:
6765 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6766 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6767 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
6777 ; CHECK:       # %bb.0:
6778 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6779 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
6780 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
6792 ; CHECK:       # %bb.0:
6793 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6794 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
6795 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
6807 ; CHECK:       # %bb.0:
6808 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6809 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6810 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
6820 ; CHECK:       # %bb.0:
6821 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6822 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10, v0.t
6823 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
6833 ; CHECK:       # %bb.0:
6834 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6835 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
6836 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
6848 ; CHECK:       # %bb.0:
6849 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
6850 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10
6851 ; CHECK-NEXT:    ret
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.fma.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl)
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:
6865 ; CHECK:       # %bb.0:
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
6869 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
6877 ; CHECK:       # %bb.0:
6878 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6879 ; CHECK-NEXT:    vfmsub.vv v8, v12, v16
6880 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
6890 ; CHECK:       # %bb.0:
6891 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6892 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
6893 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
6903 ; CHECK:       # %bb.0:
6904 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6905 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12, v0.t
6906 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
6916 ; CHECK:       # %bb.0:
6917 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6918 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
6919 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
6931 ; CHECK:       # %bb.0:
6932 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6933 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v12
6934 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
6946 ; CHECK:       # %bb.0:
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
6950 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
6959 ; CHECK:       # %bb.0:
6960 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6961 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
6962 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
6971 ; CHECK:       # %bb.0:
6972 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6973 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6974 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
6985 ; CHECK:       # %bb.0:
6986 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
6987 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
6988 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
6999 ; CHECK:       # %bb.0:
7000 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7001 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
7002 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
7013 ; CHECK:       # %bb.0:
7014 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7015 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
7016 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
7027 ; CHECK:       # %bb.0:
7028 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7029 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
7030 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
7043 ; CHECK:       # %bb.0:
7044 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7045 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
7046 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
7059 ; CHECK:       # %bb.0:
7060 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7061 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
7062 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
7073 ; CHECK:       # %bb.0:
7074 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7075 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12, v0.t
7076 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
7087 ; CHECK:       # %bb.0:
7088 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7089 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
7090 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
7103 ; CHECK:       # %bb.0:
7104 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7105 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v12
7106 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl)
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:
7119 ; CHECK:       # %bb.0:
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
7123 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
7132 ; CHECK:       # %bb.0:
7133 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7134 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16, v0.t
7135 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
7144 ; CHECK:       # %bb.0:
7145 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7146 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
7147 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
7158 ; CHECK:       # %bb.0:
7159 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7160 ; CHECK-NEXT:    vfnmadd.vv v8, v12, v16
7161 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl)
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:
7172 ; CHECK:       # %bb.0:
7173 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7174 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
7175 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
7185 ; CHECK:       # %bb.0:
7186 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7187 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
7188 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
7198 ; CHECK:       # %bb.0:
7199 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7200 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
7201 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
7213 ; CHECK:       # %bb.0:
7214 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7215 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
7216 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
7228 ; CHECK:       # %bb.0:
7229 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7230 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
7231 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
7241 ; CHECK:       # %bb.0:
7242 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7243 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12, v0.t
7244 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
7254 ; CHECK:       # %bb.0:
7255 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7256 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
7257 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
7269 ; CHECK:       # %bb.0:
7270 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
7271 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12
7272 ; CHECK-NEXT:    ret
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.fma.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl)
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:
7286 ; CHECK:       # %bb.0:
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
7291 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7299 ; CHECK:       # %bb.0:
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
7303 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7313 ; CHECK:       # %bb.0:
7314 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7315 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
7316 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7326 ; CHECK:       # %bb.0:
7327 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7328 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16, v0.t
7329 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7339 ; CHECK:       # %bb.0:
7340 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7341 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
7342 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7354 ; CHECK:       # %bb.0:
7355 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7356 ; CHECK-NEXT:    vfmsub.vf v8, fa0, v16
7357 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7369 ; CHECK:       # %bb.0:
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
7374 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7383 ; CHECK:       # %bb.0:
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
7387 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7396 ; CHECK:       # %bb.0:
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
7400 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7411 ; CHECK:       # %bb.0:
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
7415 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7426 ; CHECK:       # %bb.0:
7427 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7428 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
7429 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7440 ; CHECK:       # %bb.0:
7441 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7442 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
7443 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7454 ; CHECK:       # %bb.0:
7455 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7456 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
7457 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7470 ; CHECK:       # %bb.0:
7471 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7472 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
7473 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7486 ; CHECK:       # %bb.0:
7487 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7488 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
7489 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7500 ; CHECK:       # %bb.0:
7501 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7502 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16, v0.t
7503 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7514 ; CHECK:       # %bb.0:
7515 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7516 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
7517 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7530 ; CHECK:       # %bb.0:
7531 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7532 ; CHECK-NEXT:    vfnmadd.vf v8, fa0, v16
7533 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl)
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:
7546 ; CHECK:       # %bb.0:
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
7551 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7560 ; CHECK:       # %bb.0:
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
7564 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7573 ; CHECK:       # %bb.0:
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
7577 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7588 ; CHECK:       # %bb.0:
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
7592 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl)
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:
7603 ; CHECK:       # %bb.0:
7604 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7605 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7606 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
7616 ; CHECK:       # %bb.0:
7617 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7618 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7619 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
7629 ; CHECK:       # %bb.0:
7630 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7631 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
7632 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
7644 ; CHECK:       # %bb.0:
7645 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7646 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
7647 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
7659 ; CHECK:       # %bb.0:
7660 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7661 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7662 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
7672 ; CHECK:       # %bb.0:
7673 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7674 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16, v0.t
7675 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
7685 ; CHECK:       # %bb.0:
7686 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7687 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
7688 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
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:
7700 ; CHECK:       # %bb.0:
7701 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
7702 ; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16
7703 ; CHECK-NEXT:    ret
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.fma.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl)
7710   ret <vscale x 8 x double> %v
7713 define <vscale x 1 x half> @vfma_vv_nxv1f16_double_neg(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
7714 ; CHECK-LABEL: vfma_vv_nxv1f16_double_neg:
7715 ; CHECK:       # %bb.0:
7716 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
7717 ; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t
7718 ; CHECK-NEXT:    vmv1r.v v8, v9
7719 ; CHECK-NEXT:    ret
7720   %nega = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)
7721   %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)
7722   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %nega, <vscale x 1 x half> %negb, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl)
7723   ret <vscale x 1 x half> %v