Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vfmacc-vp.ll
blob2d6e1fd02dee5724ce0ebbf8192086f805ce623a
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 <2 x half> @llvm.vp.fma.v2f16(<2 x half>, <2 x half>, <2 x half>, <2 x i1>, i32)
8 declare <2 x half> @llvm.vp.fneg.v2f16(<2 x half>, <2 x i1>, i32)
9 declare <2 x half> @llvm.vp.merge.v2f16(<2 x i1>, <2 x half>, <2 x half>, i32)
10 declare <2 x half> @llvm.vp.select.v2f16(<2 x i1>, <2 x half>, <2 x half>, i32)
12 define <2 x half> @vfmacc_vv_v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {
13 ; CHECK-LABEL: vfmacc_vv_v2f16:
14 ; CHECK:       # %bb.0:
15 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
16 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
17 ; CHECK-NEXT:    vmv1r.v v8, v10
18 ; CHECK-NEXT:    ret
19   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)
20   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
21   ret <2 x half> %u
24 define <2 x half> @vfmacc_vv_v2f16_unmasked(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {
25 ; CHECK-LABEL: vfmacc_vv_v2f16_unmasked:
26 ; CHECK:       # %bb.0:
27 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
28 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
29 ; CHECK-NEXT:    vmv1r.v v8, v10
30 ; CHECK-NEXT:    ret
31   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)
32   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> splat (i1 -1), <2 x half> %v, <2 x half> %c, i32 %evl)
33   ret <2 x half> %u
36 define <2 x half> @vfmacc_vf_v2f16(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {
37 ; CHECK-LABEL: vfmacc_vf_v2f16:
38 ; CHECK:       # %bb.0:
39 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
40 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
41 ; CHECK-NEXT:    vmv1r.v v8, v9
42 ; CHECK-NEXT:    ret
43   %elt.head = insertelement <2 x half> poison, half %b, i32 0
44   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
45   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)
46   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
47   ret <2 x half> %u
50 define <2 x half> @vfmacc_vf_v2f16_commute(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {
51 ; CHECK-LABEL: vfmacc_vf_v2f16_commute:
52 ; CHECK:       # %bb.0:
53 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
54 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
55 ; CHECK-NEXT:    vmv1r.v v8, v9
56 ; CHECK-NEXT:    ret
57   %elt.head = insertelement <2 x half> poison, half %b, i32 0
58   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
59   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %va, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)
60   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
61   ret <2 x half> %u
64 define <2 x half> @vfmacc_vf_v2f16_unmasked(<2 x half> %va, half %b, <2 x half> %c, i32 zeroext %evl) {
65 ; CHECK-LABEL: vfmacc_vf_v2f16_unmasked:
66 ; CHECK:       # %bb.0:
67 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
68 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
69 ; CHECK-NEXT:    vmv1r.v v8, v9
70 ; CHECK-NEXT:    ret
71   %elt.head = insertelement <2 x half> poison, half %b, i32 0
72   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
73   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)
74   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> splat (i1 -1), <2 x half> %v, <2 x half> %c, i32 %evl)
75   ret <2 x half> %u
78 define <2 x half> @vfmacc_vv_v2f16_ta(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {
79 ; CHECK-LABEL: vfmacc_vv_v2f16_ta:
80 ; CHECK:       # %bb.0:
81 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
82 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
83 ; CHECK-NEXT:    vmv1r.v v8, v10
84 ; CHECK-NEXT:    ret
85   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)
86   %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
87   ret <2 x half> %u
90 define <2 x half> @vfmacc_vf_v2f16_ta(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {
91 ; CHECK-LABEL: vfmacc_vf_v2f16_ta:
92 ; CHECK:       # %bb.0:
93 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
94 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
95 ; CHECK-NEXT:    vmv1r.v v8, v9
96 ; CHECK-NEXT:    ret
97   %elt.head = insertelement <2 x half> poison, half %b, i32 0
98   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
99   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)
100   %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
101   ret <2 x half> %u
104 define <2 x half> @vfmacc_vf_v2f16_commute_ta(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {
105 ; CHECK-LABEL: vfmacc_vf_v2f16_commute_ta:
106 ; CHECK:       # %bb.0:
107 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
108 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
109 ; CHECK-NEXT:    vmv1r.v v8, v9
110 ; CHECK-NEXT:    ret
111   %elt.head = insertelement <2 x half> poison, half %b, i32 0
112   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
113   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %va, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)
114   %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
115   ret <2 x half> %u
118 declare <4 x half> @llvm.vp.fma.v4f16(<4 x half>, <4 x half>, <4 x half>, <4 x i1>, i32)
119 declare <4 x half> @llvm.vp.fneg.v4f16(<4 x half>, <4 x i1>, i32)
120 declare <4 x half> @llvm.vp.merge.v4f16(<4 x i1>, <4 x half>, <4 x half>, i32)
121 declare <4 x half> @llvm.vp.select.v4f16(<4 x i1>, <4 x half>, <4 x half>, i32)
123 define <4 x half> @vfmacc_vv_v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {
124 ; CHECK-LABEL: vfmacc_vv_v4f16:
125 ; CHECK:       # %bb.0:
126 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
127 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
128 ; CHECK-NEXT:    vmv1r.v v8, v10
129 ; CHECK-NEXT:    ret
130   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)
131   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
132   ret <4 x half> %u
135 define <4 x half> @vfmacc_vv_v4f16_unmasked(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {
136 ; CHECK-LABEL: vfmacc_vv_v4f16_unmasked:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
139 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
140 ; CHECK-NEXT:    vmv1r.v v8, v10
141 ; CHECK-NEXT:    ret
142   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)
143   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> splat (i1 -1), <4 x half> %v, <4 x half> %c, i32 %evl)
144   ret <4 x half> %u
147 define <4 x half> @vfmacc_vf_v4f16(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {
148 ; CHECK-LABEL: vfmacc_vf_v4f16:
149 ; CHECK:       # %bb.0:
150 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
151 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
152 ; CHECK-NEXT:    vmv1r.v v8, v9
153 ; CHECK-NEXT:    ret
154   %elt.head = insertelement <4 x half> poison, half %b, i32 0
155   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
156   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)
157   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
158   ret <4 x half> %u
161 define <4 x half> @vfmacc_vf_v4f16_commute(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {
162 ; CHECK-LABEL: vfmacc_vf_v4f16_commute:
163 ; CHECK:       # %bb.0:
164 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
165 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
166 ; CHECK-NEXT:    vmv1r.v v8, v9
167 ; CHECK-NEXT:    ret
168   %elt.head = insertelement <4 x half> poison, half %b, i32 0
169   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
170   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %va, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)
171   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
172   ret <4 x half> %u
175 define <4 x half> @vfmacc_vf_v4f16_unmasked(<4 x half> %va, half %b, <4 x half> %c, i32 zeroext %evl) {
176 ; CHECK-LABEL: vfmacc_vf_v4f16_unmasked:
177 ; CHECK:       # %bb.0:
178 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
179 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
180 ; CHECK-NEXT:    vmv1r.v v8, v9
181 ; CHECK-NEXT:    ret
182   %elt.head = insertelement <4 x half> poison, half %b, i32 0
183   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
184   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)
185   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> splat (i1 -1), <4 x half> %v, <4 x half> %c, i32 %evl)
186   ret <4 x half> %u
189 define <4 x half> @vfmacc_vv_v4f16_ta(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {
190 ; CHECK-LABEL: vfmacc_vv_v4f16_ta:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
193 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
194 ; CHECK-NEXT:    vmv1r.v v8, v10
195 ; CHECK-NEXT:    ret
196   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)
197   %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
198   ret <4 x half> %u
201 define <4 x half> @vfmacc_vf_v4f16_ta(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {
202 ; CHECK-LABEL: vfmacc_vf_v4f16_ta:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
205 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
206 ; CHECK-NEXT:    vmv1r.v v8, v9
207 ; CHECK-NEXT:    ret
208   %elt.head = insertelement <4 x half> poison, half %b, i32 0
209   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
210   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)
211   %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
212   ret <4 x half> %u
215 define <4 x half> @vfmacc_vf_v4f16_commute_ta(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {
216 ; CHECK-LABEL: vfmacc_vf_v4f16_commute_ta:
217 ; CHECK:       # %bb.0:
218 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
219 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
220 ; CHECK-NEXT:    vmv1r.v v8, v9
221 ; CHECK-NEXT:    ret
222   %elt.head = insertelement <4 x half> poison, half %b, i32 0
223   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
224   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %va, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)
225   %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
226   ret <4 x half> %u
229 declare <8 x half> @llvm.vp.fma.v8f16(<8 x half>, <8 x half>, <8 x half>, <8 x i1>, i32)
230 declare <8 x half> @llvm.vp.fneg.v8f16(<8 x half>, <8 x i1>, i32)
231 declare <8 x half> @llvm.vp.merge.v8f16(<8 x i1>, <8 x half>, <8 x half>, i32)
232 declare <8 x half> @llvm.vp.select.v8f16(<8 x i1>, <8 x half>, <8 x half>, i32)
234 define <8 x half> @vfmacc_vv_v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {
235 ; CHECK-LABEL: vfmacc_vv_v8f16:
236 ; CHECK:       # %bb.0:
237 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
238 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
239 ; CHECK-NEXT:    vmv1r.v v8, v10
240 ; CHECK-NEXT:    ret
241   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)
242   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
243   ret <8 x half> %u
246 define <8 x half> @vfmacc_vv_v8f16_unmasked(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {
247 ; CHECK-LABEL: vfmacc_vv_v8f16_unmasked:
248 ; CHECK:       # %bb.0:
249 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
250 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
251 ; CHECK-NEXT:    vmv1r.v v8, v10
252 ; CHECK-NEXT:    ret
253   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)
254   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> splat (i1 -1), <8 x half> %v, <8 x half> %c, i32 %evl)
255   ret <8 x half> %u
258 define <8 x half> @vfmacc_vf_v8f16(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {
259 ; CHECK-LABEL: vfmacc_vf_v8f16:
260 ; CHECK:       # %bb.0:
261 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
262 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
263 ; CHECK-NEXT:    vmv1r.v v8, v9
264 ; CHECK-NEXT:    ret
265   %elt.head = insertelement <8 x half> poison, half %b, i32 0
266   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
267   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)
268   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
269   ret <8 x half> %u
272 define <8 x half> @vfmacc_vf_v8f16_commute(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {
273 ; CHECK-LABEL: vfmacc_vf_v8f16_commute:
274 ; CHECK:       # %bb.0:
275 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
276 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
277 ; CHECK-NEXT:    vmv1r.v v8, v9
278 ; CHECK-NEXT:    ret
279   %elt.head = insertelement <8 x half> poison, half %b, i32 0
280   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
281   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %va, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)
282   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
283   ret <8 x half> %u
286 define <8 x half> @vfmacc_vf_v8f16_unmasked(<8 x half> %va, half %b, <8 x half> %c, i32 zeroext %evl) {
287 ; CHECK-LABEL: vfmacc_vf_v8f16_unmasked:
288 ; CHECK:       # %bb.0:
289 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
290 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
291 ; CHECK-NEXT:    vmv1r.v v8, v9
292 ; CHECK-NEXT:    ret
293   %elt.head = insertelement <8 x half> poison, half %b, i32 0
294   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
295   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)
296   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> splat (i1 -1), <8 x half> %v, <8 x half> %c, i32 %evl)
297   ret <8 x half> %u
300 define <8 x half> @vfmacc_vv_v8f16_ta(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {
301 ; CHECK-LABEL: vfmacc_vv_v8f16_ta:
302 ; CHECK:       # %bb.0:
303 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
304 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
305 ; CHECK-NEXT:    vmv.v.v v8, v10
306 ; CHECK-NEXT:    ret
307   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)
308   %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
309   ret <8 x half> %u
312 define <8 x half> @vfmacc_vf_v8f16_ta(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {
313 ; CHECK-LABEL: vfmacc_vf_v8f16_ta:
314 ; CHECK:       # %bb.0:
315 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
316 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
317 ; CHECK-NEXT:    vmv.v.v v8, v9
318 ; CHECK-NEXT:    ret
319   %elt.head = insertelement <8 x half> poison, half %b, i32 0
320   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
321   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)
322   %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
323   ret <8 x half> %u
326 define <8 x half> @vfmacc_vf_v8f16_commute_ta(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {
327 ; CHECK-LABEL: vfmacc_vf_v8f16_commute_ta:
328 ; CHECK:       # %bb.0:
329 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
330 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
331 ; CHECK-NEXT:    vmv.v.v v8, v9
332 ; CHECK-NEXT:    ret
333   %elt.head = insertelement <8 x half> poison, half %b, i32 0
334   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
335   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %va, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)
336   %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
337   ret <8 x half> %u
340 declare <16 x half> @llvm.vp.fma.v16f16(<16 x half>, <16 x half>, <16 x half>, <16 x i1>, i32)
341 declare <16 x half> @llvm.vp.fneg.v16f16(<16 x half>, <16 x i1>, i32)
342 declare <16 x half> @llvm.vp.merge.v16f16(<16 x i1>, <16 x half>, <16 x half>, i32)
343 declare <16 x half> @llvm.vp.select.v16f16(<16 x i1>, <16 x half>, <16 x half>, i32)
345 define <16 x half> @vfmacc_vv_v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
346 ; CHECK-LABEL: vfmacc_vv_v16f16:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
349 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
350 ; CHECK-NEXT:    vmv2r.v v8, v12
351 ; CHECK-NEXT:    ret
352   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)
353   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
354   ret <16 x half> %u
357 define <16 x half> @vfmacc_vv_v16f16_unmasked(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
358 ; CHECK-LABEL: vfmacc_vv_v16f16_unmasked:
359 ; CHECK:       # %bb.0:
360 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
361 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
362 ; CHECK-NEXT:    vmv2r.v v8, v12
363 ; CHECK-NEXT:    ret
364   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)
365   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> splat (i1 -1), <16 x half> %v, <16 x half> %c, i32 %evl)
366   ret <16 x half> %u
369 define <16 x half> @vfmacc_vf_v16f16(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
370 ; CHECK-LABEL: vfmacc_vf_v16f16:
371 ; CHECK:       # %bb.0:
372 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
373 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
374 ; CHECK-NEXT:    vmv2r.v v8, v10
375 ; CHECK-NEXT:    ret
376   %elt.head = insertelement <16 x half> poison, half %b, i32 0
377   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
378   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)
379   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
380   ret <16 x half> %u
383 define <16 x half> @vfmacc_vf_v16f16_commute(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
384 ; CHECK-LABEL: vfmacc_vf_v16f16_commute:
385 ; CHECK:       # %bb.0:
386 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
387 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
388 ; CHECK-NEXT:    vmv2r.v v8, v10
389 ; CHECK-NEXT:    ret
390   %elt.head = insertelement <16 x half> poison, half %b, i32 0
391   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
392   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %va, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)
393   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
394   ret <16 x half> %u
397 define <16 x half> @vfmacc_vf_v16f16_unmasked(<16 x half> %va, half %b, <16 x half> %c, i32 zeroext %evl) {
398 ; CHECK-LABEL: vfmacc_vf_v16f16_unmasked:
399 ; CHECK:       # %bb.0:
400 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
401 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
402 ; CHECK-NEXT:    vmv2r.v v8, v10
403 ; CHECK-NEXT:    ret
404   %elt.head = insertelement <16 x half> poison, half %b, i32 0
405   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
406   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)
407   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> splat (i1 -1), <16 x half> %v, <16 x half> %c, i32 %evl)
408   ret <16 x half> %u
411 define <16 x half> @vfmacc_vv_v16f16_ta(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
412 ; CHECK-LABEL: vfmacc_vv_v16f16_ta:
413 ; CHECK:       # %bb.0:
414 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
415 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
416 ; CHECK-NEXT:    vmv.v.v v8, v12
417 ; CHECK-NEXT:    ret
418   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)
419   %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
420   ret <16 x half> %u
423 define <16 x half> @vfmacc_vf_v16f16_ta(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
424 ; CHECK-LABEL: vfmacc_vf_v16f16_ta:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
427 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
428 ; CHECK-NEXT:    vmv.v.v v8, v10
429 ; CHECK-NEXT:    ret
430   %elt.head = insertelement <16 x half> poison, half %b, i32 0
431   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
432   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)
433   %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
434   ret <16 x half> %u
437 define <16 x half> @vfmacc_vf_v16f16_commute_ta(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
438 ; CHECK-LABEL: vfmacc_vf_v16f16_commute_ta:
439 ; CHECK:       # %bb.0:
440 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
441 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
442 ; CHECK-NEXT:    vmv.v.v v8, v10
443 ; CHECK-NEXT:    ret
444   %elt.head = insertelement <16 x half> poison, half %b, i32 0
445   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
446   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %va, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)
447   %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
448   ret <16 x half> %u
451 declare <32 x half> @llvm.vp.fma.v32f16(<32 x half>, <32 x half>, <32 x half>, <32 x i1>, i32)
452 declare <32 x half> @llvm.vp.fneg.v32f16(<32 x half>, <32 x i1>, i32)
453 declare <32 x half> @llvm.vp.merge.v32f16(<32 x i1>, <32 x half>, <32 x half>, i32)
454 declare <32 x half> @llvm.vp.select.v32f16(<32 x i1>, <32 x half>, <32 x half>, i32)
456 define <32 x half> @vfmacc_vv_v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
457 ; CHECK-LABEL: vfmacc_vv_v32f16:
458 ; CHECK:       # %bb.0:
459 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
460 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
461 ; CHECK-NEXT:    vmv4r.v v8, v16
462 ; CHECK-NEXT:    ret
463   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)
464   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
465   ret <32 x half> %u
468 define <32 x half> @vfmacc_vv_v32f16_unmasked(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
469 ; CHECK-LABEL: vfmacc_vv_v32f16_unmasked:
470 ; CHECK:       # %bb.0:
471 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
472 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
473 ; CHECK-NEXT:    vmv4r.v v8, v16
474 ; CHECK-NEXT:    ret
475   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)
476   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> splat (i1 -1), <32 x half> %v, <32 x half> %c, i32 %evl)
477   ret <32 x half> %u
480 define <32 x half> @vfmacc_vf_v32f16(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
481 ; CHECK-LABEL: vfmacc_vf_v32f16:
482 ; CHECK:       # %bb.0:
483 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
484 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
485 ; CHECK-NEXT:    vmv4r.v v8, v12
486 ; CHECK-NEXT:    ret
487   %elt.head = insertelement <32 x half> poison, half %b, i32 0
488   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
489   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)
490   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
491   ret <32 x half> %u
494 define <32 x half> @vfmacc_vf_v32f16_commute(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
495 ; CHECK-LABEL: vfmacc_vf_v32f16_commute:
496 ; CHECK:       # %bb.0:
497 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
498 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
499 ; CHECK-NEXT:    vmv4r.v v8, v12
500 ; CHECK-NEXT:    ret
501   %elt.head = insertelement <32 x half> poison, half %b, i32 0
502   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
503   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %vb, <32 x half> %va, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)
504   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
505   ret <32 x half> %u
508 define <32 x half> @vfmacc_vf_v32f16_unmasked(<32 x half> %va, half %b, <32 x half> %c, i32 zeroext %evl) {
509 ; CHECK-LABEL: vfmacc_vf_v32f16_unmasked:
510 ; CHECK:       # %bb.0:
511 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
512 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
513 ; CHECK-NEXT:    vmv4r.v v8, v12
514 ; CHECK-NEXT:    ret
515   %elt.head = insertelement <32 x half> poison, half %b, i32 0
516   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
517   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)
518   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> splat (i1 -1), <32 x half> %v, <32 x half> %c, i32 %evl)
519   ret <32 x half> %u
522 define <32 x half> @vfmacc_vv_v32f16_ta(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
523 ; CHECK-LABEL: vfmacc_vv_v32f16_ta:
524 ; CHECK:       # %bb.0:
525 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
526 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
527 ; CHECK-NEXT:    vmv.v.v v8, v16
528 ; CHECK-NEXT:    ret
529   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)
530   %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
531   ret <32 x half> %u
534 define <32 x half> @vfmacc_vf_v32f16_ta(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
535 ; CHECK-LABEL: vfmacc_vf_v32f16_ta:
536 ; CHECK:       # %bb.0:
537 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
538 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
539 ; CHECK-NEXT:    vmv.v.v v8, v12
540 ; CHECK-NEXT:    ret
541   %elt.head = insertelement <32 x half> poison, half %b, i32 0
542   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
543   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)
544   %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
545   ret <32 x half> %u
548 define <32 x half> @vfmacc_vf_v32f16_commute_ta(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
549 ; CHECK-LABEL: vfmacc_vf_v32f16_commute_ta:
550 ; CHECK:       # %bb.0:
551 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
552 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
553 ; CHECK-NEXT:    vmv.v.v v8, v12
554 ; CHECK-NEXT:    ret
555   %elt.head = insertelement <32 x half> poison, half %b, i32 0
556   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
557   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %vb, <32 x half> %va, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)
558   %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
559   ret <32 x half> %u
562 declare <2 x float> @llvm.vp.fma.v2f32(<2 x float>, <2 x float>, <2 x float>, <2 x i1>, i32)
563 declare <2 x float> @llvm.vp.fneg.v2f32(<2 x float>, <2 x i1>, i32)
564 declare <2 x float> @llvm.vp.merge.v2f32(<2 x i1>, <2 x float>, <2 x float>, i32)
565 declare <2 x float> @llvm.vp.select.v2f32(<2 x i1>, <2 x float>, <2 x float>, i32)
567 define <2 x float> @vfmacc_vv_v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {
568 ; CHECK-LABEL: vfmacc_vv_v2f32:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
571 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
572 ; CHECK-NEXT:    vmv1r.v v8, v10
573 ; CHECK-NEXT:    ret
574   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)
575   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
576   ret <2 x float> %u
579 define <2 x float> @vfmacc_vv_v2f32_unmasked(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {
580 ; CHECK-LABEL: vfmacc_vv_v2f32_unmasked:
581 ; CHECK:       # %bb.0:
582 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
583 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
584 ; CHECK-NEXT:    vmv1r.v v8, v10
585 ; CHECK-NEXT:    ret
586   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)
587   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> splat (i1 -1), <2 x float> %v, <2 x float> %c, i32 %evl)
588   ret <2 x float> %u
591 define <2 x float> @vfmacc_vf_v2f32(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {
592 ; CHECK-LABEL: vfmacc_vf_v2f32:
593 ; CHECK:       # %bb.0:
594 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
595 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
596 ; CHECK-NEXT:    vmv1r.v v8, v9
597 ; CHECK-NEXT:    ret
598   %elt.head = insertelement <2 x float> poison, float %b, i32 0
599   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
600   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)
601   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
602   ret <2 x float> %u
605 define <2 x float> @vfmacc_vf_v2f32_commute(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {
606 ; CHECK-LABEL: vfmacc_vf_v2f32_commute:
607 ; CHECK:       # %bb.0:
608 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
609 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
610 ; CHECK-NEXT:    vmv1r.v v8, v9
611 ; CHECK-NEXT:    ret
612   %elt.head = insertelement <2 x float> poison, float %b, i32 0
613   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
614   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %va, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)
615   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
616   ret <2 x float> %u
619 define <2 x float> @vfmacc_vf_v2f32_unmasked(<2 x float> %va, float %b, <2 x float> %c, i32 zeroext %evl) {
620 ; CHECK-LABEL: vfmacc_vf_v2f32_unmasked:
621 ; CHECK:       # %bb.0:
622 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
623 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
624 ; CHECK-NEXT:    vmv1r.v v8, v9
625 ; CHECK-NEXT:    ret
626   %elt.head = insertelement <2 x float> poison, float %b, i32 0
627   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
628   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)
629   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> splat (i1 -1), <2 x float> %v, <2 x float> %c, i32 %evl)
630   ret <2 x float> %u
633 define <2 x float> @vfmacc_vv_v2f32_ta(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {
634 ; CHECK-LABEL: vfmacc_vv_v2f32_ta:
635 ; CHECK:       # %bb.0:
636 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
637 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
638 ; CHECK-NEXT:    vmv1r.v v8, v10
639 ; CHECK-NEXT:    ret
640   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)
641   %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
642   ret <2 x float> %u
645 define <2 x float> @vfmacc_vf_v2f32_ta(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {
646 ; CHECK-LABEL: vfmacc_vf_v2f32_ta:
647 ; CHECK:       # %bb.0:
648 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
649 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
650 ; CHECK-NEXT:    vmv1r.v v8, v9
651 ; CHECK-NEXT:    ret
652   %elt.head = insertelement <2 x float> poison, float %b, i32 0
653   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
654   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)
655   %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
656   ret <2 x float> %u
659 define <2 x float> @vfmacc_vf_v2f32_commute_ta(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {
660 ; CHECK-LABEL: vfmacc_vf_v2f32_commute_ta:
661 ; CHECK:       # %bb.0:
662 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
663 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
664 ; CHECK-NEXT:    vmv1r.v v8, v9
665 ; CHECK-NEXT:    ret
666   %elt.head = insertelement <2 x float> poison, float %b, i32 0
667   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
668   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %va, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)
669   %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
670   ret <2 x float> %u
673 declare <4 x float> @llvm.vp.fma.v4f32(<4 x float>, <4 x float>, <4 x float>, <4 x i1>, i32)
674 declare <4 x float> @llvm.vp.fneg.v4f32(<4 x float>, <4 x i1>, i32)
675 declare <4 x float> @llvm.vp.merge.v4f32(<4 x i1>, <4 x float>, <4 x float>, i32)
676 declare <4 x float> @llvm.vp.select.v4f32(<4 x i1>, <4 x float>, <4 x float>, i32)
678 define <4 x float> @vfmacc_vv_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {
679 ; CHECK-LABEL: vfmacc_vv_v4f32:
680 ; CHECK:       # %bb.0:
681 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
682 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
683 ; CHECK-NEXT:    vmv1r.v v8, v10
684 ; CHECK-NEXT:    ret
685   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)
686   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
687   ret <4 x float> %u
690 define <4 x float> @vfmacc_vv_v4f32_unmasked(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {
691 ; CHECK-LABEL: vfmacc_vv_v4f32_unmasked:
692 ; CHECK:       # %bb.0:
693 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
694 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
695 ; CHECK-NEXT:    vmv1r.v v8, v10
696 ; CHECK-NEXT:    ret
697   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)
698   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> splat (i1 -1), <4 x float> %v, <4 x float> %c, i32 %evl)
699   ret <4 x float> %u
702 define <4 x float> @vfmacc_vf_v4f32(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {
703 ; CHECK-LABEL: vfmacc_vf_v4f32:
704 ; CHECK:       # %bb.0:
705 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
706 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
707 ; CHECK-NEXT:    vmv1r.v v8, v9
708 ; CHECK-NEXT:    ret
709   %elt.head = insertelement <4 x float> poison, float %b, i32 0
710   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
711   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)
712   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
713   ret <4 x float> %u
716 define <4 x float> @vfmacc_vf_v4f32_commute(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {
717 ; CHECK-LABEL: vfmacc_vf_v4f32_commute:
718 ; CHECK:       # %bb.0:
719 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
720 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
721 ; CHECK-NEXT:    vmv1r.v v8, v9
722 ; CHECK-NEXT:    ret
723   %elt.head = insertelement <4 x float> poison, float %b, i32 0
724   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
725   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %va, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)
726   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
727   ret <4 x float> %u
730 define <4 x float> @vfmacc_vf_v4f32_unmasked(<4 x float> %va, float %b, <4 x float> %c, i32 zeroext %evl) {
731 ; CHECK-LABEL: vfmacc_vf_v4f32_unmasked:
732 ; CHECK:       # %bb.0:
733 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
734 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
735 ; CHECK-NEXT:    vmv1r.v v8, v9
736 ; CHECK-NEXT:    ret
737   %elt.head = insertelement <4 x float> poison, float %b, i32 0
738   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
739   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)
740   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> splat (i1 -1), <4 x float> %v, <4 x float> %c, i32 %evl)
741   ret <4 x float> %u
744 define <4 x float> @vfmacc_vv_v4f32_ta(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {
745 ; CHECK-LABEL: vfmacc_vv_v4f32_ta:
746 ; CHECK:       # %bb.0:
747 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
748 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
749 ; CHECK-NEXT:    vmv.v.v v8, v10
750 ; CHECK-NEXT:    ret
751   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)
752   %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
753   ret <4 x float> %u
756 define <4 x float> @vfmacc_vf_v4f32_ta(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {
757 ; CHECK-LABEL: vfmacc_vf_v4f32_ta:
758 ; CHECK:       # %bb.0:
759 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
760 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
761 ; CHECK-NEXT:    vmv.v.v v8, v9
762 ; CHECK-NEXT:    ret
763   %elt.head = insertelement <4 x float> poison, float %b, i32 0
764   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
765   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)
766   %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
767   ret <4 x float> %u
770 define <4 x float> @vfmacc_vf_v4f32_commute_ta(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {
771 ; CHECK-LABEL: vfmacc_vf_v4f32_commute_ta:
772 ; CHECK:       # %bb.0:
773 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
774 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
775 ; CHECK-NEXT:    vmv.v.v v8, v9
776 ; CHECK-NEXT:    ret
777   %elt.head = insertelement <4 x float> poison, float %b, i32 0
778   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
779   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %va, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)
780   %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
781   ret <4 x float> %u
784 declare <8 x float> @llvm.vp.fma.v8f32(<8 x float>, <8 x float>, <8 x float>, <8 x i1>, i32)
785 declare <8 x float> @llvm.vp.fneg.v8f32(<8 x float>, <8 x i1>, i32)
786 declare <8 x float> @llvm.vp.merge.v8f32(<8 x i1>, <8 x float>, <8 x float>, i32)
787 declare <8 x float> @llvm.vp.select.v8f32(<8 x i1>, <8 x float>, <8 x float>, i32)
789 define <8 x float> @vfmacc_vv_v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {
790 ; CHECK-LABEL: vfmacc_vv_v8f32:
791 ; CHECK:       # %bb.0:
792 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
793 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
794 ; CHECK-NEXT:    vmv2r.v v8, v12
795 ; CHECK-NEXT:    ret
796   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)
797   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
798   ret <8 x float> %u
801 define <8 x float> @vfmacc_vv_v8f32_unmasked(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {
802 ; CHECK-LABEL: vfmacc_vv_v8f32_unmasked:
803 ; CHECK:       # %bb.0:
804 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
805 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
806 ; CHECK-NEXT:    vmv2r.v v8, v12
807 ; CHECK-NEXT:    ret
808   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)
809   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> splat (i1 -1), <8 x float> %v, <8 x float> %c, i32 %evl)
810   ret <8 x float> %u
813 define <8 x float> @vfmacc_vf_v8f32(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {
814 ; CHECK-LABEL: vfmacc_vf_v8f32:
815 ; CHECK:       # %bb.0:
816 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
817 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
818 ; CHECK-NEXT:    vmv2r.v v8, v10
819 ; CHECK-NEXT:    ret
820   %elt.head = insertelement <8 x float> poison, float %b, i32 0
821   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
822   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)
823   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
824   ret <8 x float> %u
827 define <8 x float> @vfmacc_vf_v8f32_commute(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {
828 ; CHECK-LABEL: vfmacc_vf_v8f32_commute:
829 ; CHECK:       # %bb.0:
830 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
831 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
832 ; CHECK-NEXT:    vmv2r.v v8, v10
833 ; CHECK-NEXT:    ret
834   %elt.head = insertelement <8 x float> poison, float %b, i32 0
835   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
836   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %va, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)
837   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
838   ret <8 x float> %u
841 define <8 x float> @vfmacc_vf_v8f32_unmasked(<8 x float> %va, float %b, <8 x float> %c, i32 zeroext %evl) {
842 ; CHECK-LABEL: vfmacc_vf_v8f32_unmasked:
843 ; CHECK:       # %bb.0:
844 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
845 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
846 ; CHECK-NEXT:    vmv2r.v v8, v10
847 ; CHECK-NEXT:    ret
848   %elt.head = insertelement <8 x float> poison, float %b, i32 0
849   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
850   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)
851   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> splat (i1 -1), <8 x float> %v, <8 x float> %c, i32 %evl)
852   ret <8 x float> %u
855 define <8 x float> @vfmacc_vv_v8f32_ta(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {
856 ; CHECK-LABEL: vfmacc_vv_v8f32_ta:
857 ; CHECK:       # %bb.0:
858 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
859 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
860 ; CHECK-NEXT:    vmv.v.v v8, v12
861 ; CHECK-NEXT:    ret
862   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)
863   %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
864   ret <8 x float> %u
867 define <8 x float> @vfmacc_vf_v8f32_ta(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {
868 ; CHECK-LABEL: vfmacc_vf_v8f32_ta:
869 ; CHECK:       # %bb.0:
870 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
871 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
872 ; CHECK-NEXT:    vmv.v.v v8, v10
873 ; CHECK-NEXT:    ret
874   %elt.head = insertelement <8 x float> poison, float %b, i32 0
875   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
876   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)
877   %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
878   ret <8 x float> %u
881 define <8 x float> @vfmacc_vf_v8f32_commute_ta(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {
882 ; CHECK-LABEL: vfmacc_vf_v8f32_commute_ta:
883 ; CHECK:       # %bb.0:
884 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
885 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
886 ; CHECK-NEXT:    vmv.v.v v8, v10
887 ; CHECK-NEXT:    ret
888   %elt.head = insertelement <8 x float> poison, float %b, i32 0
889   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
890   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %va, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)
891   %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
892   ret <8 x float> %u
895 declare <16 x float> @llvm.vp.fma.v16f32(<16 x float>, <16 x float>, <16 x float>, <16 x i1>, i32)
896 declare <16 x float> @llvm.vp.fneg.v16f32(<16 x float>, <16 x i1>, i32)
897 declare <16 x float> @llvm.vp.merge.v16f32(<16 x i1>, <16 x float>, <16 x float>, i32)
898 declare <16 x float> @llvm.vp.select.v16f32(<16 x i1>, <16 x float>, <16 x float>, i32)
900 define <16 x float> @vfmacc_vv_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {
901 ; CHECK-LABEL: vfmacc_vv_v16f32:
902 ; CHECK:       # %bb.0:
903 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
904 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
905 ; CHECK-NEXT:    vmv4r.v v8, v16
906 ; CHECK-NEXT:    ret
907   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)
908   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
909   ret <16 x float> %u
912 define <16 x float> @vfmacc_vv_v16f32_unmasked(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {
913 ; CHECK-LABEL: vfmacc_vv_v16f32_unmasked:
914 ; CHECK:       # %bb.0:
915 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
916 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
917 ; CHECK-NEXT:    vmv4r.v v8, v16
918 ; CHECK-NEXT:    ret
919   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)
920   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> splat (i1 -1), <16 x float> %v, <16 x float> %c, i32 %evl)
921   ret <16 x float> %u
924 define <16 x float> @vfmacc_vf_v16f32(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {
925 ; CHECK-LABEL: vfmacc_vf_v16f32:
926 ; CHECK:       # %bb.0:
927 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
928 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
929 ; CHECK-NEXT:    vmv4r.v v8, v12
930 ; CHECK-NEXT:    ret
931   %elt.head = insertelement <16 x float> poison, float %b, i32 0
932   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
933   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)
934   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
935   ret <16 x float> %u
938 define <16 x float> @vfmacc_vf_v16f32_commute(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {
939 ; CHECK-LABEL: vfmacc_vf_v16f32_commute:
940 ; CHECK:       # %bb.0:
941 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
942 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
943 ; CHECK-NEXT:    vmv4r.v v8, v12
944 ; CHECK-NEXT:    ret
945   %elt.head = insertelement <16 x float> poison, float %b, i32 0
946   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
947   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %va, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)
948   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
949   ret <16 x float> %u
952 define <16 x float> @vfmacc_vf_v16f32_unmasked(<16 x float> %va, float %b, <16 x float> %c, i32 zeroext %evl) {
953 ; CHECK-LABEL: vfmacc_vf_v16f32_unmasked:
954 ; CHECK:       # %bb.0:
955 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
956 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
957 ; CHECK-NEXT:    vmv4r.v v8, v12
958 ; CHECK-NEXT:    ret
959   %elt.head = insertelement <16 x float> poison, float %b, i32 0
960   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
961   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)
962   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> splat (i1 -1), <16 x float> %v, <16 x float> %c, i32 %evl)
963   ret <16 x float> %u
966 define <16 x float> @vfmacc_vv_v16f32_ta(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {
967 ; CHECK-LABEL: vfmacc_vv_v16f32_ta:
968 ; CHECK:       # %bb.0:
969 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
970 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
971 ; CHECK-NEXT:    vmv.v.v v8, v16
972 ; CHECK-NEXT:    ret
973   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)
974   %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
975   ret <16 x float> %u
978 define <16 x float> @vfmacc_vf_v16f32_ta(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {
979 ; CHECK-LABEL: vfmacc_vf_v16f32_ta:
980 ; CHECK:       # %bb.0:
981 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
982 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
983 ; CHECK-NEXT:    vmv.v.v v8, v12
984 ; CHECK-NEXT:    ret
985   %elt.head = insertelement <16 x float> poison, float %b, i32 0
986   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
987   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)
988   %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
989   ret <16 x float> %u
992 define <16 x float> @vfmacc_vf_v16f32_commute_ta(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {
993 ; CHECK-LABEL: vfmacc_vf_v16f32_commute_ta:
994 ; CHECK:       # %bb.0:
995 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
996 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
997 ; CHECK-NEXT:    vmv.v.v v8, v12
998 ; CHECK-NEXT:    ret
999   %elt.head = insertelement <16 x float> poison, float %b, i32 0
1000   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
1001   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %va, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)
1002   %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
1003   ret <16 x float> %u
1006 declare <2 x double> @llvm.vp.fma.v2f64(<2 x double>, <2 x double>, <2 x double>, <2 x i1>, i32)
1007 declare <2 x double> @llvm.vp.fneg.v2f64(<2 x double>, <2 x i1>, i32)
1008 declare <2 x double> @llvm.vp.merge.v2f64(<2 x i1>, <2 x double>, <2 x double>, i32)
1009 declare <2 x double> @llvm.vp.select.v2f64(<2 x i1>, <2 x double>, <2 x double>, i32)
1011 define <2 x double> @vfmacc_vv_v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {
1012 ; CHECK-LABEL: vfmacc_vv_v2f64:
1013 ; CHECK:       # %bb.0:
1014 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1015 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
1016 ; CHECK-NEXT:    vmv1r.v v8, v10
1017 ; CHECK-NEXT:    ret
1018   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)
1019   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1020   ret <2 x double> %u
1023 define <2 x double> @vfmacc_vv_v2f64_unmasked(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {
1024 ; CHECK-LABEL: vfmacc_vv_v2f64_unmasked:
1025 ; CHECK:       # %bb.0:
1026 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
1027 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
1028 ; CHECK-NEXT:    vmv1r.v v8, v10
1029 ; CHECK-NEXT:    ret
1030   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)
1031   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> splat (i1 -1), <2 x double> %v, <2 x double> %c, i32 %evl)
1032   ret <2 x double> %u
1035 define <2 x double> @vfmacc_vf_v2f64(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {
1036 ; CHECK-LABEL: vfmacc_vf_v2f64:
1037 ; CHECK:       # %bb.0:
1038 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1039 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1040 ; CHECK-NEXT:    vmv1r.v v8, v9
1041 ; CHECK-NEXT:    ret
1042   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1043   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1044   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)
1045   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1046   ret <2 x double> %u
1049 define <2 x double> @vfmacc_vf_v2f64_commute(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {
1050 ; CHECK-LABEL: vfmacc_vf_v2f64_commute:
1051 ; CHECK:       # %bb.0:
1052 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1053 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1054 ; CHECK-NEXT:    vmv1r.v v8, v9
1055 ; CHECK-NEXT:    ret
1056   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1057   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1058   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %va, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)
1059   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1060   ret <2 x double> %u
1063 define <2 x double> @vfmacc_vf_v2f64_unmasked(<2 x double> %va, double %b, <2 x double> %c, i32 zeroext %evl) {
1064 ; CHECK-LABEL: vfmacc_vf_v2f64_unmasked:
1065 ; CHECK:       # %bb.0:
1066 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
1067 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
1068 ; CHECK-NEXT:    vmv1r.v v8, v9
1069 ; CHECK-NEXT:    ret
1070   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1071   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1072   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)
1073   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> splat (i1 -1), <2 x double> %v, <2 x double> %c, i32 %evl)
1074   ret <2 x double> %u
1077 define <2 x double> @vfmacc_vv_v2f64_ta(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {
1078 ; CHECK-LABEL: vfmacc_vv_v2f64_ta:
1079 ; CHECK:       # %bb.0:
1080 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1081 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
1082 ; CHECK-NEXT:    vmv.v.v v8, v10
1083 ; CHECK-NEXT:    ret
1084   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)
1085   %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1086   ret <2 x double> %u
1089 define <2 x double> @vfmacc_vf_v2f64_ta(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {
1090 ; CHECK-LABEL: vfmacc_vf_v2f64_ta:
1091 ; CHECK:       # %bb.0:
1092 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1093 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1094 ; CHECK-NEXT:    vmv.v.v v8, v9
1095 ; CHECK-NEXT:    ret
1096   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1097   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1098   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)
1099   %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1100   ret <2 x double> %u
1103 define <2 x double> @vfmacc_vf_v2f64_commute_ta(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {
1104 ; CHECK-LABEL: vfmacc_vf_v2f64_commute_ta:
1105 ; CHECK:       # %bb.0:
1106 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1107 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1108 ; CHECK-NEXT:    vmv.v.v v8, v9
1109 ; CHECK-NEXT:    ret
1110   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1111   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1112   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %va, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)
1113   %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1114   ret <2 x double> %u
1117 declare <4 x double> @llvm.vp.fma.v4f64(<4 x double>, <4 x double>, <4 x double>, <4 x i1>, i32)
1118 declare <4 x double> @llvm.vp.fneg.v4f64(<4 x double>, <4 x i1>, i32)
1119 declare <4 x double> @llvm.vp.merge.v4f64(<4 x i1>, <4 x double>, <4 x double>, i32)
1120 declare <4 x double> @llvm.vp.select.v4f64(<4 x i1>, <4 x double>, <4 x double>, i32)
1122 define <4 x double> @vfmacc_vv_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {
1123 ; CHECK-LABEL: vfmacc_vv_v4f64:
1124 ; CHECK:       # %bb.0:
1125 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1126 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
1127 ; CHECK-NEXT:    vmv2r.v v8, v12
1128 ; CHECK-NEXT:    ret
1129   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)
1130   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1131   ret <4 x double> %u
1134 define <4 x double> @vfmacc_vv_v4f64_unmasked(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {
1135 ; CHECK-LABEL: vfmacc_vv_v4f64_unmasked:
1136 ; CHECK:       # %bb.0:
1137 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
1138 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
1139 ; CHECK-NEXT:    vmv2r.v v8, v12
1140 ; CHECK-NEXT:    ret
1141   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)
1142   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> splat (i1 -1), <4 x double> %v, <4 x double> %c, i32 %evl)
1143   ret <4 x double> %u
1146 define <4 x double> @vfmacc_vf_v4f64(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {
1147 ; CHECK-LABEL: vfmacc_vf_v4f64:
1148 ; CHECK:       # %bb.0:
1149 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1150 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1151 ; CHECK-NEXT:    vmv2r.v v8, v10
1152 ; CHECK-NEXT:    ret
1153   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1154   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1155   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)
1156   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1157   ret <4 x double> %u
1160 define <4 x double> @vfmacc_vf_v4f64_commute(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {
1161 ; CHECK-LABEL: vfmacc_vf_v4f64_commute:
1162 ; CHECK:       # %bb.0:
1163 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1164 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1165 ; CHECK-NEXT:    vmv2r.v v8, v10
1166 ; CHECK-NEXT:    ret
1167   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1168   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1169   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %va, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)
1170   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1171   ret <4 x double> %u
1174 define <4 x double> @vfmacc_vf_v4f64_unmasked(<4 x double> %va, double %b, <4 x double> %c, i32 zeroext %evl) {
1175 ; CHECK-LABEL: vfmacc_vf_v4f64_unmasked:
1176 ; CHECK:       # %bb.0:
1177 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
1178 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
1179 ; CHECK-NEXT:    vmv2r.v v8, v10
1180 ; CHECK-NEXT:    ret
1181   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1182   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1183   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)
1184   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> splat (i1 -1), <4 x double> %v, <4 x double> %c, i32 %evl)
1185   ret <4 x double> %u
1188 define <4 x double> @vfmacc_vv_v4f64_ta(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {
1189 ; CHECK-LABEL: vfmacc_vv_v4f64_ta:
1190 ; CHECK:       # %bb.0:
1191 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1192 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
1193 ; CHECK-NEXT:    vmv.v.v v8, v12
1194 ; CHECK-NEXT:    ret
1195   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)
1196   %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1197   ret <4 x double> %u
1200 define <4 x double> @vfmacc_vf_v4f64_ta(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {
1201 ; CHECK-LABEL: vfmacc_vf_v4f64_ta:
1202 ; CHECK:       # %bb.0:
1203 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1204 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1205 ; CHECK-NEXT:    vmv.v.v v8, v10
1206 ; CHECK-NEXT:    ret
1207   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1208   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1209   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)
1210   %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1211   ret <4 x double> %u
1214 define <4 x double> @vfmacc_vf_v4f64_commute_ta(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {
1215 ; CHECK-LABEL: vfmacc_vf_v4f64_commute_ta:
1216 ; CHECK:       # %bb.0:
1217 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1218 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1219 ; CHECK-NEXT:    vmv.v.v v8, v10
1220 ; CHECK-NEXT:    ret
1221   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1222   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1223   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %va, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)
1224   %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1225   ret <4 x double> %u
1228 declare <8 x double> @llvm.vp.fma.v8f64(<8 x double>, <8 x double>, <8 x double>, <8 x i1>, i32)
1229 declare <8 x double> @llvm.vp.fneg.v8f64(<8 x double>, <8 x i1>, i32)
1230 declare <8 x double> @llvm.vp.merge.v8f64(<8 x i1>, <8 x double>, <8 x double>, i32)
1231 declare <8 x double> @llvm.vp.select.v8f64(<8 x i1>, <8 x double>, <8 x double>, i32)
1233 define <8 x double> @vfmacc_vv_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {
1234 ; CHECK-LABEL: vfmacc_vv_v8f64:
1235 ; CHECK:       # %bb.0:
1236 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1237 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1238 ; CHECK-NEXT:    vmv4r.v v8, v16
1239 ; CHECK-NEXT:    ret
1240   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)
1241   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1242   ret <8 x double> %u
1245 define <8 x double> @vfmacc_vv_v8f64_unmasked(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {
1246 ; CHECK-LABEL: vfmacc_vv_v8f64_unmasked:
1247 ; CHECK:       # %bb.0:
1248 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
1249 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
1250 ; CHECK-NEXT:    vmv4r.v v8, v16
1251 ; CHECK-NEXT:    ret
1252   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)
1253   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> splat (i1 -1), <8 x double> %v, <8 x double> %c, i32 %evl)
1254   ret <8 x double> %u
1257 define <8 x double> @vfmacc_vf_v8f64(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {
1258 ; CHECK-LABEL: vfmacc_vf_v8f64:
1259 ; CHECK:       # %bb.0:
1260 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1261 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1262 ; CHECK-NEXT:    vmv4r.v v8, v12
1263 ; CHECK-NEXT:    ret
1264   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1265   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1266   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)
1267   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1268   ret <8 x double> %u
1271 define <8 x double> @vfmacc_vf_v8f64_commute(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {
1272 ; CHECK-LABEL: vfmacc_vf_v8f64_commute:
1273 ; CHECK:       # %bb.0:
1274 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1275 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1276 ; CHECK-NEXT:    vmv4r.v v8, v12
1277 ; CHECK-NEXT:    ret
1278   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1279   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1280   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %va, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)
1281   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1282   ret <8 x double> %u
1285 define <8 x double> @vfmacc_vf_v8f64_unmasked(<8 x double> %va, double %b, <8 x double> %c, i32 zeroext %evl) {
1286 ; CHECK-LABEL: vfmacc_vf_v8f64_unmasked:
1287 ; CHECK:       # %bb.0:
1288 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
1289 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
1290 ; CHECK-NEXT:    vmv4r.v v8, v12
1291 ; CHECK-NEXT:    ret
1292   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1293   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1294   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)
1295   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> splat (i1 -1), <8 x double> %v, <8 x double> %c, i32 %evl)
1296   ret <8 x double> %u
1299 define <8 x double> @vfmacc_vv_v8f64_ta(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {
1300 ; CHECK-LABEL: vfmacc_vv_v8f64_ta:
1301 ; CHECK:       # %bb.0:
1302 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1303 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1304 ; CHECK-NEXT:    vmv.v.v v8, v16
1305 ; CHECK-NEXT:    ret
1306   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)
1307   %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1308   ret <8 x double> %u
1311 define <8 x double> @vfmacc_vf_v8f64_ta(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {
1312 ; CHECK-LABEL: vfmacc_vf_v8f64_ta:
1313 ; CHECK:       # %bb.0:
1314 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1315 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1316 ; CHECK-NEXT:    vmv.v.v v8, v12
1317 ; CHECK-NEXT:    ret
1318   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1319   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1320   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)
1321   %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1322   ret <8 x double> %u
1325 define <8 x double> @vfmacc_vf_v8f64_commute_ta(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {
1326 ; CHECK-LABEL: vfmacc_vf_v8f64_commute_ta:
1327 ; CHECK:       # %bb.0:
1328 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1329 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1330 ; CHECK-NEXT:    vmv.v.v v8, v12
1331 ; CHECK-NEXT:    ret
1332   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1333   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1334   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %va, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)
1335   %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1336   ret <8 x double> %u