Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vfmacc-vp.ll
blob78b83046738c60a47823a08dca43d5aa699b9987
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   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
20   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
21   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %allones, i32 %evl)
22   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
23   ret <2 x half> %u
26 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) {
27 ; CHECK-LABEL: vfmacc_vv_v2f16_unmasked:
28 ; CHECK:       # %bb.0:
29 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
30 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
31 ; CHECK-NEXT:    vmv1r.v v8, v10
32 ; CHECK-NEXT:    ret
33   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
34   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
35   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %allones, i32 %evl)
36   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %allones, <2 x half> %v, <2 x half> %c, i32 %evl)
37   ret <2 x half> %u
40 define <2 x half> @vfmacc_vf_v2f16(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {
41 ; CHECK-LABEL: vfmacc_vf_v2f16:
42 ; CHECK:       # %bb.0:
43 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
44 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
45 ; CHECK-NEXT:    vmv1r.v v8, v9
46 ; CHECK-NEXT:    ret
47   %elt.head = insertelement <2 x half> poison, half %b, i32 0
48   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
49   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
50   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
51   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> %allones, i32 %evl)
52   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
53   ret <2 x half> %u
56 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) {
57 ; CHECK-LABEL: vfmacc_vf_v2f16_commute:
58 ; CHECK:       # %bb.0:
59 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
60 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
61 ; CHECK-NEXT:    vmv1r.v v8, v9
62 ; CHECK-NEXT:    ret
63   %elt.head = insertelement <2 x half> poison, half %b, i32 0
64   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
65   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
66   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
67   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %va, <2 x half> %c, <2 x i1> %allones, i32 %evl)
68   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
69   ret <2 x half> %u
72 define <2 x half> @vfmacc_vf_v2f16_unmasked(<2 x half> %va, half %b, <2 x half> %c, i32 zeroext %evl) {
73 ; CHECK-LABEL: vfmacc_vf_v2f16_unmasked:
74 ; CHECK:       # %bb.0:
75 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
76 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
77 ; CHECK-NEXT:    vmv1r.v v8, v9
78 ; CHECK-NEXT:    ret
79   %elt.head = insertelement <2 x half> poison, half %b, i32 0
80   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
81   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
82   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
83   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> %allones, i32 %evl)
84   %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %allones, <2 x half> %v, <2 x half> %c, i32 %evl)
85   ret <2 x half> %u
88 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) {
89 ; CHECK-LABEL: vfmacc_vv_v2f16_ta:
90 ; CHECK:       # %bb.0:
91 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
92 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
93 ; CHECK-NEXT:    vmv1r.v v8, v10
94 ; CHECK-NEXT:    ret
95   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
96   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
97   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %allones, i32 %evl)
98   %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
99   ret <2 x half> %u
102 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) {
103 ; CHECK-LABEL: vfmacc_vf_v2f16_ta:
104 ; CHECK:       # %bb.0:
105 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
106 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
107 ; CHECK-NEXT:    vmv1r.v v8, v9
108 ; CHECK-NEXT:    ret
109   %elt.head = insertelement <2 x half> poison, half %b, i32 0
110   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
111   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
112   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
113   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> %allones, 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 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) {
119 ; CHECK-LABEL: vfmacc_vf_v2f16_commute_ta:
120 ; CHECK:       # %bb.0:
121 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
122 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
123 ; CHECK-NEXT:    vmv1r.v v8, v9
124 ; CHECK-NEXT:    ret
125   %elt.head = insertelement <2 x half> poison, half %b, i32 0
126   %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer
127   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
128   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
129   %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %va, <2 x half> %c, <2 x i1> %allones, i32 %evl)
130   %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)
131   ret <2 x half> %u
134 declare <4 x half> @llvm.vp.fma.v4f16(<4 x half>, <4 x half>, <4 x half>, <4 x i1>, i32)
135 declare <4 x half> @llvm.vp.fneg.v4f16(<4 x half>, <4 x i1>, i32)
136 declare <4 x half> @llvm.vp.merge.v4f16(<4 x i1>, <4 x half>, <4 x half>, i32)
137 declare <4 x half> @llvm.vp.select.v4f16(<4 x i1>, <4 x half>, <4 x half>, i32)
139 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) {
140 ; CHECK-LABEL: vfmacc_vv_v4f16:
141 ; CHECK:       # %bb.0:
142 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
143 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
144 ; CHECK-NEXT:    vmv1r.v v8, v10
145 ; CHECK-NEXT:    ret
146   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
147   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
148   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %allones, i32 %evl)
149   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
150   ret <4 x half> %u
153 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) {
154 ; CHECK-LABEL: vfmacc_vv_v4f16_unmasked:
155 ; CHECK:       # %bb.0:
156 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
157 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
158 ; CHECK-NEXT:    vmv1r.v v8, v10
159 ; CHECK-NEXT:    ret
160   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
161   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
162   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %allones, i32 %evl)
163   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %allones, <4 x half> %v, <4 x half> %c, i32 %evl)
164   ret <4 x half> %u
167 define <4 x half> @vfmacc_vf_v4f16(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {
168 ; CHECK-LABEL: vfmacc_vf_v4f16:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
171 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
172 ; CHECK-NEXT:    vmv1r.v v8, v9
173 ; CHECK-NEXT:    ret
174   %elt.head = insertelement <4 x half> poison, half %b, i32 0
175   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
176   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
177   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
178   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %c, <4 x i1> %allones, i32 %evl)
179   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
180   ret <4 x half> %u
183 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) {
184 ; CHECK-LABEL: vfmacc_vf_v4f16_commute:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
187 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
188 ; CHECK-NEXT:    vmv1r.v v8, v9
189 ; CHECK-NEXT:    ret
190   %elt.head = insertelement <4 x half> poison, half %b, i32 0
191   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
192   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
193   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
194   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %va, <4 x half> %c, <4 x i1> %allones, i32 %evl)
195   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
196   ret <4 x half> %u
199 define <4 x half> @vfmacc_vf_v4f16_unmasked(<4 x half> %va, half %b, <4 x half> %c, i32 zeroext %evl) {
200 ; CHECK-LABEL: vfmacc_vf_v4f16_unmasked:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
203 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
204 ; CHECK-NEXT:    vmv1r.v v8, v9
205 ; CHECK-NEXT:    ret
206   %elt.head = insertelement <4 x half> poison, half %b, i32 0
207   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
208   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
209   %allones = shufflevector <4 x i1> %splat, <4 x i1> 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> %allones, i32 %evl)
211   %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %allones, <4 x half> %v, <4 x half> %c, i32 %evl)
212   ret <4 x half> %u
215 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) {
216 ; CHECK-LABEL: vfmacc_vv_v4f16_ta:
217 ; CHECK:       # %bb.0:
218 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
219 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
220 ; CHECK-NEXT:    vmv1r.v v8, v10
221 ; CHECK-NEXT:    ret
222   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
223   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
224   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %allones, 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 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) {
230 ; CHECK-LABEL: vfmacc_vf_v4f16_ta:
231 ; CHECK:       # %bb.0:
232 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
233 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
234 ; CHECK-NEXT:    vmv1r.v v8, v9
235 ; CHECK-NEXT:    ret
236   %elt.head = insertelement <4 x half> poison, half %b, i32 0
237   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
238   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
239   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
240   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %c, <4 x i1> %allones, i32 %evl)
241   %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
242   ret <4 x half> %u
245 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) {
246 ; CHECK-LABEL: vfmacc_vf_v4f16_commute_ta:
247 ; CHECK:       # %bb.0:
248 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
249 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
250 ; CHECK-NEXT:    vmv1r.v v8, v9
251 ; CHECK-NEXT:    ret
252   %elt.head = insertelement <4 x half> poison, half %b, i32 0
253   %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer
254   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
255   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
256   %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %va, <4 x half> %c, <4 x i1> %allones, i32 %evl)
257   %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)
258   ret <4 x half> %u
261 declare <8 x half> @llvm.vp.fma.v8f16(<8 x half>, <8 x half>, <8 x half>, <8 x i1>, i32)
262 declare <8 x half> @llvm.vp.fneg.v8f16(<8 x half>, <8 x i1>, i32)
263 declare <8 x half> @llvm.vp.merge.v8f16(<8 x i1>, <8 x half>, <8 x half>, i32)
264 declare <8 x half> @llvm.vp.select.v8f16(<8 x i1>, <8 x half>, <8 x half>, i32)
266 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) {
267 ; CHECK-LABEL: vfmacc_vv_v8f16:
268 ; CHECK:       # %bb.0:
269 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
270 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
271 ; CHECK-NEXT:    vmv1r.v v8, v10
272 ; CHECK-NEXT:    ret
273   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
274   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
275   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %allones, i32 %evl)
276   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
277   ret <8 x half> %u
280 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) {
281 ; CHECK-LABEL: vfmacc_vv_v8f16_unmasked:
282 ; CHECK:       # %bb.0:
283 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
284 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
285 ; CHECK-NEXT:    vmv1r.v v8, v10
286 ; CHECK-NEXT:    ret
287   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
288   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
289   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %allones, i32 %evl)
290   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %allones, <8 x half> %v, <8 x half> %c, i32 %evl)
291   ret <8 x half> %u
294 define <8 x half> @vfmacc_vf_v8f16(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {
295 ; CHECK-LABEL: vfmacc_vf_v8f16:
296 ; CHECK:       # %bb.0:
297 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
298 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
299 ; CHECK-NEXT:    vmv1r.v v8, v9
300 ; CHECK-NEXT:    ret
301   %elt.head = insertelement <8 x half> poison, half %b, i32 0
302   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
303   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
304   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
305   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> %allones, i32 %evl)
306   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
307   ret <8 x half> %u
310 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) {
311 ; CHECK-LABEL: vfmacc_vf_v8f16_commute:
312 ; CHECK:       # %bb.0:
313 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
314 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
315 ; CHECK-NEXT:    vmv1r.v v8, v9
316 ; CHECK-NEXT:    ret
317   %elt.head = insertelement <8 x half> poison, half %b, i32 0
318   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
319   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
320   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
321   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %va, <8 x half> %c, <8 x i1> %allones, i32 %evl)
322   %u = call <8 x half> @llvm.vp.merge.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_unmasked(<8 x half> %va, half %b, <8 x half> %c, i32 zeroext %evl) {
327 ; CHECK-LABEL: vfmacc_vf_v8f16_unmasked:
328 ; CHECK:       # %bb.0:
329 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
330 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
331 ; CHECK-NEXT:    vmv1r.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   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
336   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
337   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> %allones, i32 %evl)
338   %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %allones, <8 x half> %v, <8 x half> %c, i32 %evl)
339   ret <8 x half> %u
342 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) {
343 ; CHECK-LABEL: vfmacc_vv_v8f16_ta:
344 ; CHECK:       # %bb.0:
345 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
346 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
347 ; CHECK-NEXT:    vmv.v.v v8, v10
348 ; CHECK-NEXT:    ret
349   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
350   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
351   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %allones, i32 %evl)
352   %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
353   ret <8 x half> %u
356 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) {
357 ; CHECK-LABEL: vfmacc_vf_v8f16_ta:
358 ; CHECK:       # %bb.0:
359 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
360 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
361 ; CHECK-NEXT:    vmv.v.v v8, v9
362 ; CHECK-NEXT:    ret
363   %elt.head = insertelement <8 x half> poison, half %b, i32 0
364   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
365   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
366   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
367   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> %allones, i32 %evl)
368   %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
369   ret <8 x half> %u
372 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) {
373 ; CHECK-LABEL: vfmacc_vf_v8f16_commute_ta:
374 ; CHECK:       # %bb.0:
375 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
376 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
377 ; CHECK-NEXT:    vmv.v.v v8, v9
378 ; CHECK-NEXT:    ret
379   %elt.head = insertelement <8 x half> poison, half %b, i32 0
380   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
381   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
382   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
383   %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %va, <8 x half> %c, <8 x i1> %allones, i32 %evl)
384   %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)
385   ret <8 x half> %u
388 declare <16 x half> @llvm.vp.fma.v16f16(<16 x half>, <16 x half>, <16 x half>, <16 x i1>, i32)
389 declare <16 x half> @llvm.vp.fneg.v16f16(<16 x half>, <16 x i1>, i32)
390 declare <16 x half> @llvm.vp.merge.v16f16(<16 x i1>, <16 x half>, <16 x half>, i32)
391 declare <16 x half> @llvm.vp.select.v16f16(<16 x i1>, <16 x half>, <16 x half>, i32)
393 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) {
394 ; CHECK-LABEL: vfmacc_vv_v16f16:
395 ; CHECK:       # %bb.0:
396 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
397 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
398 ; CHECK-NEXT:    vmv2r.v v8, v12
399 ; CHECK-NEXT:    ret
400   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
401   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
402   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %allones, i32 %evl)
403   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
404   ret <16 x half> %u
407 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) {
408 ; CHECK-LABEL: vfmacc_vv_v16f16_unmasked:
409 ; CHECK:       # %bb.0:
410 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
411 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
412 ; CHECK-NEXT:    vmv2r.v v8, v12
413 ; CHECK-NEXT:    ret
414   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
415   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
416   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %allones, i32 %evl)
417   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %allones, <16 x half> %v, <16 x half> %c, i32 %evl)
418   ret <16 x half> %u
421 define <16 x half> @vfmacc_vf_v16f16(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
422 ; CHECK-LABEL: vfmacc_vf_v16f16:
423 ; CHECK:       # %bb.0:
424 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
425 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
426 ; CHECK-NEXT:    vmv2r.v v8, v10
427 ; CHECK-NEXT:    ret
428   %elt.head = insertelement <16 x half> poison, half %b, i32 0
429   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
430   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
431   %allones = shufflevector <16 x i1> %splat, <16 x i1> 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> %allones, i32 %evl)
433   %u = call <16 x half> @llvm.vp.merge.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(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {
438 ; CHECK-LABEL: vfmacc_vf_v16f16_commute:
439 ; CHECK:       # %bb.0:
440 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
441 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
442 ; CHECK-NEXT:    vmv2r.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   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
447   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
448   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %va, <16 x half> %c, <16 x i1> %allones, i32 %evl)
449   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
450   ret <16 x half> %u
453 define <16 x half> @vfmacc_vf_v16f16_unmasked(<16 x half> %va, half %b, <16 x half> %c, i32 zeroext %evl) {
454 ; CHECK-LABEL: vfmacc_vf_v16f16_unmasked:
455 ; CHECK:       # %bb.0:
456 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
457 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
458 ; CHECK-NEXT:    vmv2r.v v8, v10
459 ; CHECK-NEXT:    ret
460   %elt.head = insertelement <16 x half> poison, half %b, i32 0
461   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
462   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
463   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
464   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %c, <16 x i1> %allones, i32 %evl)
465   %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %allones, <16 x half> %v, <16 x half> %c, i32 %evl)
466   ret <16 x half> %u
469 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) {
470 ; CHECK-LABEL: vfmacc_vv_v16f16_ta:
471 ; CHECK:       # %bb.0:
472 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
473 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
474 ; CHECK-NEXT:    vmv.v.v v8, v12
475 ; CHECK-NEXT:    ret
476   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
477   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
478   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %allones, i32 %evl)
479   %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
480   ret <16 x half> %u
483 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) {
484 ; CHECK-LABEL: vfmacc_vf_v16f16_ta:
485 ; CHECK:       # %bb.0:
486 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
487 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
488 ; CHECK-NEXT:    vmv.v.v v8, v10
489 ; CHECK-NEXT:    ret
490   %elt.head = insertelement <16 x half> poison, half %b, i32 0
491   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
492   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
493   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
494   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %c, <16 x i1> %allones, i32 %evl)
495   %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
496   ret <16 x half> %u
499 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) {
500 ; CHECK-LABEL: vfmacc_vf_v16f16_commute_ta:
501 ; CHECK:       # %bb.0:
502 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
503 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
504 ; CHECK-NEXT:    vmv.v.v v8, v10
505 ; CHECK-NEXT:    ret
506   %elt.head = insertelement <16 x half> poison, half %b, i32 0
507   %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer
508   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
509   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
510   %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %va, <16 x half> %c, <16 x i1> %allones, i32 %evl)
511   %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)
512   ret <16 x half> %u
515 declare <32 x half> @llvm.vp.fma.v32f16(<32 x half>, <32 x half>, <32 x half>, <32 x i1>, i32)
516 declare <32 x half> @llvm.vp.fneg.v32f16(<32 x half>, <32 x i1>, i32)
517 declare <32 x half> @llvm.vp.merge.v32f16(<32 x i1>, <32 x half>, <32 x half>, i32)
518 declare <32 x half> @llvm.vp.select.v32f16(<32 x i1>, <32 x half>, <32 x half>, i32)
520 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) {
521 ; CHECK-LABEL: vfmacc_vv_v32f16:
522 ; CHECK:       # %bb.0:
523 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
524 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
525 ; CHECK-NEXT:    vmv4r.v v8, v16
526 ; CHECK-NEXT:    ret
527   %splat = insertelement <32 x i1> poison, i1 -1, i32 0
528   %allones = shufflevector <32 x i1> %splat, <32 x i1> poison, <32 x i32> zeroinitializer
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> %allones, i32 %evl)
530   %u = call <32 x half> @llvm.vp.merge.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_vv_v32f16_unmasked(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
535 ; CHECK-LABEL: vfmacc_vv_v32f16_unmasked:
536 ; CHECK:       # %bb.0:
537 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
538 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
539 ; CHECK-NEXT:    vmv4r.v v8, v16
540 ; CHECK-NEXT:    ret
541   %splat = insertelement <32 x i1> poison, i1 -1, i32 0
542   %allones = shufflevector <32 x i1> %splat, <32 x i1> poison, <32 x i32> zeroinitializer
543   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %allones, i32 %evl)
544   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %allones, <32 x half> %v, <32 x half> %c, i32 %evl)
545   ret <32 x half> %u
548 define <32 x half> @vfmacc_vf_v32f16(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {
549 ; CHECK-LABEL: vfmacc_vf_v32f16:
550 ; CHECK:       # %bb.0:
551 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
552 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
553 ; CHECK-NEXT:    vmv4r.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   %splat = insertelement <32 x i1> poison, i1 -1, i32 0
558   %allones = shufflevector <32 x i1> %splat, <32 x i1> poison, <32 x i32> zeroinitializer
559   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> %allones, i32 %evl)
560   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
561   ret <32 x half> %u
564 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) {
565 ; CHECK-LABEL: vfmacc_vf_v32f16_commute:
566 ; CHECK:       # %bb.0:
567 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
568 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
569 ; CHECK-NEXT:    vmv4r.v v8, v12
570 ; CHECK-NEXT:    ret
571   %elt.head = insertelement <32 x half> poison, half %b, i32 0
572   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
573   %splat = insertelement <32 x i1> poison, i1 -1, i32 0
574   %allones = shufflevector <32 x i1> %splat, <32 x i1> poison, <32 x i32> zeroinitializer
575   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %vb, <32 x half> %va, <32 x half> %c, <32 x i1> %allones, i32 %evl)
576   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
577   ret <32 x half> %u
580 define <32 x half> @vfmacc_vf_v32f16_unmasked(<32 x half> %va, half %b, <32 x half> %c, i32 zeroext %evl) {
581 ; CHECK-LABEL: vfmacc_vf_v32f16_unmasked:
582 ; CHECK:       # %bb.0:
583 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
584 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
585 ; CHECK-NEXT:    vmv4r.v v8, v12
586 ; CHECK-NEXT:    ret
587   %elt.head = insertelement <32 x half> poison, half %b, i32 0
588   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
589   %splat = insertelement <32 x i1> poison, i1 -1, i32 0
590   %allones = shufflevector <32 x i1> %splat, <32 x i1> poison, <32 x i32> zeroinitializer
591   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> %allones, i32 %evl)
592   %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %allones, <32 x half> %v, <32 x half> %c, i32 %evl)
593   ret <32 x half> %u
596 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) {
597 ; CHECK-LABEL: vfmacc_vv_v32f16_ta:
598 ; CHECK:       # %bb.0:
599 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
600 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
601 ; CHECK-NEXT:    vmv.v.v v8, v16
602 ; CHECK-NEXT:    ret
603   %splat = insertelement <32 x i1> poison, i1 -1, i32 0
604   %allones = shufflevector <32 x i1> %splat, <32 x i1> poison, <32 x i32> zeroinitializer
605   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %allones, i32 %evl)
606   %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
607   ret <32 x half> %u
610 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) {
611 ; CHECK-LABEL: vfmacc_vf_v32f16_ta:
612 ; CHECK:       # %bb.0:
613 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
614 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
615 ; CHECK-NEXT:    vmv.v.v v8, v12
616 ; CHECK-NEXT:    ret
617   %elt.head = insertelement <32 x half> poison, half %b, i32 0
618   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
619   %splat = insertelement <32 x i1> poison, i1 -1, i32 0
620   %allones = shufflevector <32 x i1> %splat, <32 x i1> poison, <32 x i32> zeroinitializer
621   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> %allones, i32 %evl)
622   %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
623   ret <32 x half> %u
626 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) {
627 ; CHECK-LABEL: vfmacc_vf_v32f16_commute_ta:
628 ; CHECK:       # %bb.0:
629 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
630 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
631 ; CHECK-NEXT:    vmv.v.v v8, v12
632 ; CHECK-NEXT:    ret
633   %elt.head = insertelement <32 x half> poison, half %b, i32 0
634   %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer
635   %splat = insertelement <32 x i1> poison, i1 -1, i32 0
636   %allones = shufflevector <32 x i1> %splat, <32 x i1> poison, <32 x i32> zeroinitializer
637   %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %vb, <32 x half> %va, <32 x half> %c, <32 x i1> %allones, i32 %evl)
638   %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)
639   ret <32 x half> %u
642 declare <2 x float> @llvm.vp.fma.v2f32(<2 x float>, <2 x float>, <2 x float>, <2 x i1>, i32)
643 declare <2 x float> @llvm.vp.fneg.v2f32(<2 x float>, <2 x i1>, i32)
644 declare <2 x float> @llvm.vp.merge.v2f32(<2 x i1>, <2 x float>, <2 x float>, i32)
645 declare <2 x float> @llvm.vp.select.v2f32(<2 x i1>, <2 x float>, <2 x float>, i32)
647 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) {
648 ; CHECK-LABEL: vfmacc_vv_v2f32:
649 ; CHECK:       # %bb.0:
650 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
651 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
652 ; CHECK-NEXT:    vmv1r.v v8, v10
653 ; CHECK-NEXT:    ret
654   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
655   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
656   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %allones, i32 %evl)
657   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
658   ret <2 x float> %u
661 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) {
662 ; CHECK-LABEL: vfmacc_vv_v2f32_unmasked:
663 ; CHECK:       # %bb.0:
664 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
665 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
666 ; CHECK-NEXT:    vmv1r.v v8, v10
667 ; CHECK-NEXT:    ret
668   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
669   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
670   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %allones, i32 %evl)
671   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %allones, <2 x float> %v, <2 x float> %c, i32 %evl)
672   ret <2 x float> %u
675 define <2 x float> @vfmacc_vf_v2f32(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {
676 ; CHECK-LABEL: vfmacc_vf_v2f32:
677 ; CHECK:       # %bb.0:
678 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
679 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
680 ; CHECK-NEXT:    vmv1r.v v8, v9
681 ; CHECK-NEXT:    ret
682   %elt.head = insertelement <2 x float> poison, float %b, i32 0
683   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
684   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
685   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
686   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> %allones, i32 %evl)
687   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
688   ret <2 x float> %u
691 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) {
692 ; CHECK-LABEL: vfmacc_vf_v2f32_commute:
693 ; CHECK:       # %bb.0:
694 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
695 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
696 ; CHECK-NEXT:    vmv1r.v v8, v9
697 ; CHECK-NEXT:    ret
698   %elt.head = insertelement <2 x float> poison, float %b, i32 0
699   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
700   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
701   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
702   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %va, <2 x float> %c, <2 x i1> %allones, i32 %evl)
703   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
704   ret <2 x float> %u
707 define <2 x float> @vfmacc_vf_v2f32_unmasked(<2 x float> %va, float %b, <2 x float> %c, i32 zeroext %evl) {
708 ; CHECK-LABEL: vfmacc_vf_v2f32_unmasked:
709 ; CHECK:       # %bb.0:
710 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
711 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
712 ; CHECK-NEXT:    vmv1r.v v8, v9
713 ; CHECK-NEXT:    ret
714   %elt.head = insertelement <2 x float> poison, float %b, i32 0
715   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
716   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
717   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
718   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> %allones, i32 %evl)
719   %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %allones, <2 x float> %v, <2 x float> %c, i32 %evl)
720   ret <2 x float> %u
723 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) {
724 ; CHECK-LABEL: vfmacc_vv_v2f32_ta:
725 ; CHECK:       # %bb.0:
726 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
727 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
728 ; CHECK-NEXT:    vmv1r.v v8, v10
729 ; CHECK-NEXT:    ret
730   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
731   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
732   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %allones, i32 %evl)
733   %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
734   ret <2 x float> %u
737 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) {
738 ; CHECK-LABEL: vfmacc_vf_v2f32_ta:
739 ; CHECK:       # %bb.0:
740 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
741 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
742 ; CHECK-NEXT:    vmv1r.v v8, v9
743 ; CHECK-NEXT:    ret
744   %elt.head = insertelement <2 x float> poison, float %b, i32 0
745   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
746   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
747   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
748   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> %allones, i32 %evl)
749   %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
750   ret <2 x float> %u
753 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) {
754 ; CHECK-LABEL: vfmacc_vf_v2f32_commute_ta:
755 ; CHECK:       # %bb.0:
756 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
757 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
758 ; CHECK-NEXT:    vmv1r.v v8, v9
759 ; CHECK-NEXT:    ret
760   %elt.head = insertelement <2 x float> poison, float %b, i32 0
761   %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer
762   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
763   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
764   %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %va, <2 x float> %c, <2 x i1> %allones, i32 %evl)
765   %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)
766   ret <2 x float> %u
769 declare <4 x float> @llvm.vp.fma.v4f32(<4 x float>, <4 x float>, <4 x float>, <4 x i1>, i32)
770 declare <4 x float> @llvm.vp.fneg.v4f32(<4 x float>, <4 x i1>, i32)
771 declare <4 x float> @llvm.vp.merge.v4f32(<4 x i1>, <4 x float>, <4 x float>, i32)
772 declare <4 x float> @llvm.vp.select.v4f32(<4 x i1>, <4 x float>, <4 x float>, i32)
774 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) {
775 ; CHECK-LABEL: vfmacc_vv_v4f32:
776 ; CHECK:       # %bb.0:
777 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
778 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
779 ; CHECK-NEXT:    vmv1r.v v8, v10
780 ; CHECK-NEXT:    ret
781   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
782   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
783   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %allones, i32 %evl)
784   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
785   ret <4 x float> %u
788 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) {
789 ; CHECK-LABEL: vfmacc_vv_v4f32_unmasked:
790 ; CHECK:       # %bb.0:
791 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
792 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
793 ; CHECK-NEXT:    vmv1r.v v8, v10
794 ; CHECK-NEXT:    ret
795   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
796   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
797   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %allones, i32 %evl)
798   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %allones, <4 x float> %v, <4 x float> %c, i32 %evl)
799   ret <4 x float> %u
802 define <4 x float> @vfmacc_vf_v4f32(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {
803 ; CHECK-LABEL: vfmacc_vf_v4f32:
804 ; CHECK:       # %bb.0:
805 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
806 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
807 ; CHECK-NEXT:    vmv1r.v v8, v9
808 ; CHECK-NEXT:    ret
809   %elt.head = insertelement <4 x float> poison, float %b, i32 0
810   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
811   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
812   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
813   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> %allones, i32 %evl)
814   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
815   ret <4 x float> %u
818 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) {
819 ; CHECK-LABEL: vfmacc_vf_v4f32_commute:
820 ; CHECK:       # %bb.0:
821 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
822 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
823 ; CHECK-NEXT:    vmv1r.v v8, v9
824 ; CHECK-NEXT:    ret
825   %elt.head = insertelement <4 x float> poison, float %b, i32 0
826   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
827   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
828   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
829   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %va, <4 x float> %c, <4 x i1> %allones, i32 %evl)
830   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
831   ret <4 x float> %u
834 define <4 x float> @vfmacc_vf_v4f32_unmasked(<4 x float> %va, float %b, <4 x float> %c, i32 zeroext %evl) {
835 ; CHECK-LABEL: vfmacc_vf_v4f32_unmasked:
836 ; CHECK:       # %bb.0:
837 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
838 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
839 ; CHECK-NEXT:    vmv1r.v v8, v9
840 ; CHECK-NEXT:    ret
841   %elt.head = insertelement <4 x float> poison, float %b, i32 0
842   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
843   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
844   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
845   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> %allones, i32 %evl)
846   %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %allones, <4 x float> %v, <4 x float> %c, i32 %evl)
847   ret <4 x float> %u
850 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) {
851 ; CHECK-LABEL: vfmacc_vv_v4f32_ta:
852 ; CHECK:       # %bb.0:
853 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
854 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
855 ; CHECK-NEXT:    vmv.v.v v8, v10
856 ; CHECK-NEXT:    ret
857   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
858   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
859   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %allones, i32 %evl)
860   %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
861   ret <4 x float> %u
864 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) {
865 ; CHECK-LABEL: vfmacc_vf_v4f32_ta:
866 ; CHECK:       # %bb.0:
867 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
868 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
869 ; CHECK-NEXT:    vmv.v.v v8, v9
870 ; CHECK-NEXT:    ret
871   %elt.head = insertelement <4 x float> poison, float %b, i32 0
872   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
873   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
874   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
875   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> %allones, i32 %evl)
876   %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
877   ret <4 x float> %u
880 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) {
881 ; CHECK-LABEL: vfmacc_vf_v4f32_commute_ta:
882 ; CHECK:       # %bb.0:
883 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
884 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
885 ; CHECK-NEXT:    vmv.v.v v8, v9
886 ; CHECK-NEXT:    ret
887   %elt.head = insertelement <4 x float> poison, float %b, i32 0
888   %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer
889   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
890   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
891   %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %va, <4 x float> %c, <4 x i1> %allones, i32 %evl)
892   %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)
893   ret <4 x float> %u
896 declare <8 x float> @llvm.vp.fma.v8f32(<8 x float>, <8 x float>, <8 x float>, <8 x i1>, i32)
897 declare <8 x float> @llvm.vp.fneg.v8f32(<8 x float>, <8 x i1>, i32)
898 declare <8 x float> @llvm.vp.merge.v8f32(<8 x i1>, <8 x float>, <8 x float>, i32)
899 declare <8 x float> @llvm.vp.select.v8f32(<8 x i1>, <8 x float>, <8 x float>, i32)
901 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) {
902 ; CHECK-LABEL: vfmacc_vv_v8f32:
903 ; CHECK:       # %bb.0:
904 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
905 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
906 ; CHECK-NEXT:    vmv2r.v v8, v12
907 ; CHECK-NEXT:    ret
908   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
909   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
910   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %allones, i32 %evl)
911   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
912   ret <8 x float> %u
915 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) {
916 ; CHECK-LABEL: vfmacc_vv_v8f32_unmasked:
917 ; CHECK:       # %bb.0:
918 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
919 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
920 ; CHECK-NEXT:    vmv2r.v v8, v12
921 ; CHECK-NEXT:    ret
922   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
923   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
924   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %allones, i32 %evl)
925   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %allones, <8 x float> %v, <8 x float> %c, i32 %evl)
926   ret <8 x float> %u
929 define <8 x float> @vfmacc_vf_v8f32(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {
930 ; CHECK-LABEL: vfmacc_vf_v8f32:
931 ; CHECK:       # %bb.0:
932 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
933 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
934 ; CHECK-NEXT:    vmv2r.v v8, v10
935 ; CHECK-NEXT:    ret
936   %elt.head = insertelement <8 x float> poison, float %b, i32 0
937   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
938   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
939   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
940   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> %allones, i32 %evl)
941   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
942   ret <8 x float> %u
945 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) {
946 ; CHECK-LABEL: vfmacc_vf_v8f32_commute:
947 ; CHECK:       # %bb.0:
948 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
949 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
950 ; CHECK-NEXT:    vmv2r.v v8, v10
951 ; CHECK-NEXT:    ret
952   %elt.head = insertelement <8 x float> poison, float %b, i32 0
953   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
954   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
955   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
956   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %va, <8 x float> %c, <8 x i1> %allones, i32 %evl)
957   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
958   ret <8 x float> %u
961 define <8 x float> @vfmacc_vf_v8f32_unmasked(<8 x float> %va, float %b, <8 x float> %c, i32 zeroext %evl) {
962 ; CHECK-LABEL: vfmacc_vf_v8f32_unmasked:
963 ; CHECK:       # %bb.0:
964 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
965 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
966 ; CHECK-NEXT:    vmv2r.v v8, v10
967 ; CHECK-NEXT:    ret
968   %elt.head = insertelement <8 x float> poison, float %b, i32 0
969   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
970   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
971   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
972   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> %allones, i32 %evl)
973   %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %allones, <8 x float> %v, <8 x float> %c, i32 %evl)
974   ret <8 x float> %u
977 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) {
978 ; CHECK-LABEL: vfmacc_vv_v8f32_ta:
979 ; CHECK:       # %bb.0:
980 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
981 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
982 ; CHECK-NEXT:    vmv.v.v v8, v12
983 ; CHECK-NEXT:    ret
984   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
985   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
986   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %allones, i32 %evl)
987   %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
988   ret <8 x float> %u
991 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) {
992 ; CHECK-LABEL: vfmacc_vf_v8f32_ta:
993 ; CHECK:       # %bb.0:
994 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
995 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
996 ; CHECK-NEXT:    vmv.v.v v8, v10
997 ; CHECK-NEXT:    ret
998   %elt.head = insertelement <8 x float> poison, float %b, i32 0
999   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
1000   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1001   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1002   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> %allones, i32 %evl)
1003   %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
1004   ret <8 x float> %u
1007 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) {
1008 ; CHECK-LABEL: vfmacc_vf_v8f32_commute_ta:
1009 ; CHECK:       # %bb.0:
1010 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
1011 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1012 ; CHECK-NEXT:    vmv.v.v v8, v10
1013 ; CHECK-NEXT:    ret
1014   %elt.head = insertelement <8 x float> poison, float %b, i32 0
1015   %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer
1016   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1017   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1018   %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %va, <8 x float> %c, <8 x i1> %allones, i32 %evl)
1019   %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)
1020   ret <8 x float> %u
1023 declare <16 x float> @llvm.vp.fma.v16f32(<16 x float>, <16 x float>, <16 x float>, <16 x i1>, i32)
1024 declare <16 x float> @llvm.vp.fneg.v16f32(<16 x float>, <16 x i1>, i32)
1025 declare <16 x float> @llvm.vp.merge.v16f32(<16 x i1>, <16 x float>, <16 x float>, i32)
1026 declare <16 x float> @llvm.vp.select.v16f32(<16 x i1>, <16 x float>, <16 x float>, i32)
1028 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) {
1029 ; CHECK-LABEL: vfmacc_vv_v16f32:
1030 ; CHECK:       # %bb.0:
1031 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
1032 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1033 ; CHECK-NEXT:    vmv4r.v v8, v16
1034 ; CHECK-NEXT:    ret
1035   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
1036   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
1037   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %allones, i32 %evl)
1038   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
1039   ret <16 x float> %u
1042 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) {
1043 ; CHECK-LABEL: vfmacc_vv_v16f32_unmasked:
1044 ; CHECK:       # %bb.0:
1045 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
1046 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
1047 ; CHECK-NEXT:    vmv4r.v v8, v16
1048 ; CHECK-NEXT:    ret
1049   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
1050   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
1051   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %allones, i32 %evl)
1052   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %allones, <16 x float> %v, <16 x float> %c, i32 %evl)
1053   ret <16 x float> %u
1056 define <16 x float> @vfmacc_vf_v16f32(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {
1057 ; CHECK-LABEL: vfmacc_vf_v16f32:
1058 ; CHECK:       # %bb.0:
1059 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
1060 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1061 ; CHECK-NEXT:    vmv4r.v v8, v12
1062 ; CHECK-NEXT:    ret
1063   %elt.head = insertelement <16 x float> poison, float %b, i32 0
1064   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
1065   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
1066   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
1067   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> %allones, i32 %evl)
1068   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
1069   ret <16 x float> %u
1072 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) {
1073 ; CHECK-LABEL: vfmacc_vf_v16f32_commute:
1074 ; CHECK:       # %bb.0:
1075 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
1076 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1077 ; CHECK-NEXT:    vmv4r.v v8, v12
1078 ; CHECK-NEXT:    ret
1079   %elt.head = insertelement <16 x float> poison, float %b, i32 0
1080   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
1081   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
1082   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
1083   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %va, <16 x float> %c, <16 x i1> %allones, i32 %evl)
1084   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
1085   ret <16 x float> %u
1088 define <16 x float> @vfmacc_vf_v16f32_unmasked(<16 x float> %va, float %b, <16 x float> %c, i32 zeroext %evl) {
1089 ; CHECK-LABEL: vfmacc_vf_v16f32_unmasked:
1090 ; CHECK:       # %bb.0:
1091 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
1092 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
1093 ; CHECK-NEXT:    vmv4r.v v8, v12
1094 ; CHECK-NEXT:    ret
1095   %elt.head = insertelement <16 x float> poison, float %b, i32 0
1096   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
1097   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
1098   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
1099   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> %allones, i32 %evl)
1100   %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %allones, <16 x float> %v, <16 x float> %c, i32 %evl)
1101   ret <16 x float> %u
1104 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) {
1105 ; CHECK-LABEL: vfmacc_vv_v16f32_ta:
1106 ; CHECK:       # %bb.0:
1107 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1108 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1109 ; CHECK-NEXT:    vmv.v.v v8, v16
1110 ; CHECK-NEXT:    ret
1111   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
1112   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
1113   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %allones, i32 %evl)
1114   %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
1115   ret <16 x float> %u
1118 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) {
1119 ; CHECK-LABEL: vfmacc_vf_v16f32_ta:
1120 ; CHECK:       # %bb.0:
1121 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1122 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1123 ; CHECK-NEXT:    vmv.v.v v8, v12
1124 ; CHECK-NEXT:    ret
1125   %elt.head = insertelement <16 x float> poison, float %b, i32 0
1126   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
1127   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
1128   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
1129   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> %allones, i32 %evl)
1130   %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
1131   ret <16 x float> %u
1134 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) {
1135 ; CHECK-LABEL: vfmacc_vf_v16f32_commute_ta:
1136 ; CHECK:       # %bb.0:
1137 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1138 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1139 ; CHECK-NEXT:    vmv.v.v v8, v12
1140 ; CHECK-NEXT:    ret
1141   %elt.head = insertelement <16 x float> poison, float %b, i32 0
1142   %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer
1143   %splat = insertelement <16 x i1> poison, i1 -1, i32 0
1144   %allones = shufflevector <16 x i1> %splat, <16 x i1> poison, <16 x i32> zeroinitializer
1145   %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %va, <16 x float> %c, <16 x i1> %allones, i32 %evl)
1146   %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)
1147   ret <16 x float> %u
1150 declare <2 x double> @llvm.vp.fma.v2f64(<2 x double>, <2 x double>, <2 x double>, <2 x i1>, i32)
1151 declare <2 x double> @llvm.vp.fneg.v2f64(<2 x double>, <2 x i1>, i32)
1152 declare <2 x double> @llvm.vp.merge.v2f64(<2 x i1>, <2 x double>, <2 x double>, i32)
1153 declare <2 x double> @llvm.vp.select.v2f64(<2 x i1>, <2 x double>, <2 x double>, i32)
1155 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) {
1156 ; CHECK-LABEL: vfmacc_vv_v2f64:
1157 ; CHECK:       # %bb.0:
1158 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1159 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
1160 ; CHECK-NEXT:    vmv1r.v v8, v10
1161 ; CHECK-NEXT:    ret
1162   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
1163   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
1164   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %allones, i32 %evl)
1165   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1166   ret <2 x double> %u
1169 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) {
1170 ; CHECK-LABEL: vfmacc_vv_v2f64_unmasked:
1171 ; CHECK:       # %bb.0:
1172 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
1173 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
1174 ; CHECK-NEXT:    vmv1r.v v8, v10
1175 ; CHECK-NEXT:    ret
1176   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
1177   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
1178   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %allones, i32 %evl)
1179   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %allones, <2 x double> %v, <2 x double> %c, i32 %evl)
1180   ret <2 x double> %u
1183 define <2 x double> @vfmacc_vf_v2f64(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {
1184 ; CHECK-LABEL: vfmacc_vf_v2f64:
1185 ; CHECK:       # %bb.0:
1186 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1187 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1188 ; CHECK-NEXT:    vmv1r.v v8, v9
1189 ; CHECK-NEXT:    ret
1190   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1191   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1192   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
1193   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
1194   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> %allones, i32 %evl)
1195   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1196   ret <2 x double> %u
1199 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) {
1200 ; CHECK-LABEL: vfmacc_vf_v2f64_commute:
1201 ; CHECK:       # %bb.0:
1202 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1203 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1204 ; CHECK-NEXT:    vmv1r.v v8, v9
1205 ; CHECK-NEXT:    ret
1206   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1207   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1208   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
1209   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
1210   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %va, <2 x double> %c, <2 x i1> %allones, i32 %evl)
1211   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1212   ret <2 x double> %u
1215 define <2 x double> @vfmacc_vf_v2f64_unmasked(<2 x double> %va, double %b, <2 x double> %c, i32 zeroext %evl) {
1216 ; CHECK-LABEL: vfmacc_vf_v2f64_unmasked:
1217 ; CHECK:       # %bb.0:
1218 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
1219 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
1220 ; CHECK-NEXT:    vmv1r.v v8, v9
1221 ; CHECK-NEXT:    ret
1222   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1223   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1224   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
1225   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
1226   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> %allones, i32 %evl)
1227   %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %allones, <2 x double> %v, <2 x double> %c, i32 %evl)
1228   ret <2 x double> %u
1231 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) {
1232 ; CHECK-LABEL: vfmacc_vv_v2f64_ta:
1233 ; CHECK:       # %bb.0:
1234 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1235 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
1236 ; CHECK-NEXT:    vmv.v.v v8, v10
1237 ; CHECK-NEXT:    ret
1238   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
1239   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
1240   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %allones, i32 %evl)
1241   %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1242   ret <2 x double> %u
1245 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) {
1246 ; CHECK-LABEL: vfmacc_vf_v2f64_ta:
1247 ; CHECK:       # %bb.0:
1248 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1249 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1250 ; CHECK-NEXT:    vmv.v.v v8, v9
1251 ; CHECK-NEXT:    ret
1252   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1253   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1254   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
1255   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
1256   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> %allones, i32 %evl)
1257   %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1258   ret <2 x double> %u
1261 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) {
1262 ; CHECK-LABEL: vfmacc_vf_v2f64_commute_ta:
1263 ; CHECK:       # %bb.0:
1264 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1265 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1266 ; CHECK-NEXT:    vmv.v.v v8, v9
1267 ; CHECK-NEXT:    ret
1268   %elt.head = insertelement <2 x double> poison, double %b, i32 0
1269   %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer
1270   %splat = insertelement <2 x i1> poison, i1 -1, i32 0
1271   %allones = shufflevector <2 x i1> %splat, <2 x i1> poison, <2 x i32> zeroinitializer
1272   %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %va, <2 x double> %c, <2 x i1> %allones, i32 %evl)
1273   %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)
1274   ret <2 x double> %u
1277 declare <4 x double> @llvm.vp.fma.v4f64(<4 x double>, <4 x double>, <4 x double>, <4 x i1>, i32)
1278 declare <4 x double> @llvm.vp.fneg.v4f64(<4 x double>, <4 x i1>, i32)
1279 declare <4 x double> @llvm.vp.merge.v4f64(<4 x i1>, <4 x double>, <4 x double>, i32)
1280 declare <4 x double> @llvm.vp.select.v4f64(<4 x i1>, <4 x double>, <4 x double>, i32)
1282 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) {
1283 ; CHECK-LABEL: vfmacc_vv_v4f64:
1284 ; CHECK:       # %bb.0:
1285 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1286 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
1287 ; CHECK-NEXT:    vmv2r.v v8, v12
1288 ; CHECK-NEXT:    ret
1289   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
1290   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
1291   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %allones, i32 %evl)
1292   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1293   ret <4 x double> %u
1296 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) {
1297 ; CHECK-LABEL: vfmacc_vv_v4f64_unmasked:
1298 ; CHECK:       # %bb.0:
1299 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
1300 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
1301 ; CHECK-NEXT:    vmv2r.v v8, v12
1302 ; CHECK-NEXT:    ret
1303   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
1304   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
1305   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %allones, i32 %evl)
1306   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %allones, <4 x double> %v, <4 x double> %c, i32 %evl)
1307   ret <4 x double> %u
1310 define <4 x double> @vfmacc_vf_v4f64(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {
1311 ; CHECK-LABEL: vfmacc_vf_v4f64:
1312 ; CHECK:       # %bb.0:
1313 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1314 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1315 ; CHECK-NEXT:    vmv2r.v v8, v10
1316 ; CHECK-NEXT:    ret
1317   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1318   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1319   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
1320   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
1321   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> %allones, i32 %evl)
1322   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1323   ret <4 x double> %u
1326 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) {
1327 ; CHECK-LABEL: vfmacc_vf_v4f64_commute:
1328 ; CHECK:       # %bb.0:
1329 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1330 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1331 ; CHECK-NEXT:    vmv2r.v v8, v10
1332 ; CHECK-NEXT:    ret
1333   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1334   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1335   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
1336   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
1337   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %va, <4 x double> %c, <4 x i1> %allones, i32 %evl)
1338   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1339   ret <4 x double> %u
1342 define <4 x double> @vfmacc_vf_v4f64_unmasked(<4 x double> %va, double %b, <4 x double> %c, i32 zeroext %evl) {
1343 ; CHECK-LABEL: vfmacc_vf_v4f64_unmasked:
1344 ; CHECK:       # %bb.0:
1345 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
1346 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
1347 ; CHECK-NEXT:    vmv2r.v v8, v10
1348 ; CHECK-NEXT:    ret
1349   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1350   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1351   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
1352   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
1353   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> %allones, i32 %evl)
1354   %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %allones, <4 x double> %v, <4 x double> %c, i32 %evl)
1355   ret <4 x double> %u
1358 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) {
1359 ; CHECK-LABEL: vfmacc_vv_v4f64_ta:
1360 ; CHECK:       # %bb.0:
1361 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1362 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
1363 ; CHECK-NEXT:    vmv.v.v v8, v12
1364 ; CHECK-NEXT:    ret
1365   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
1366   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
1367   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %allones, i32 %evl)
1368   %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1369   ret <4 x double> %u
1372 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) {
1373 ; CHECK-LABEL: vfmacc_vf_v4f64_ta:
1374 ; CHECK:       # %bb.0:
1375 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1376 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1377 ; CHECK-NEXT:    vmv.v.v v8, v10
1378 ; CHECK-NEXT:    ret
1379   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1380   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1381   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
1382   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
1383   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> %allones, i32 %evl)
1384   %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1385   ret <4 x double> %u
1388 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) {
1389 ; CHECK-LABEL: vfmacc_vf_v4f64_commute_ta:
1390 ; CHECK:       # %bb.0:
1391 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1392 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1393 ; CHECK-NEXT:    vmv.v.v v8, v10
1394 ; CHECK-NEXT:    ret
1395   %elt.head = insertelement <4 x double> poison, double %b, i32 0
1396   %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer
1397   %splat = insertelement <4 x i1> poison, i1 -1, i32 0
1398   %allones = shufflevector <4 x i1> %splat, <4 x i1> poison, <4 x i32> zeroinitializer
1399   %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %va, <4 x double> %c, <4 x i1> %allones, i32 %evl)
1400   %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)
1401   ret <4 x double> %u
1404 declare <8 x double> @llvm.vp.fma.v8f64(<8 x double>, <8 x double>, <8 x double>, <8 x i1>, i32)
1405 declare <8 x double> @llvm.vp.fneg.v8f64(<8 x double>, <8 x i1>, i32)
1406 declare <8 x double> @llvm.vp.merge.v8f64(<8 x i1>, <8 x double>, <8 x double>, i32)
1407 declare <8 x double> @llvm.vp.select.v8f64(<8 x i1>, <8 x double>, <8 x double>, i32)
1409 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) {
1410 ; CHECK-LABEL: vfmacc_vv_v8f64:
1411 ; CHECK:       # %bb.0:
1412 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1413 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1414 ; CHECK-NEXT:    vmv4r.v v8, v16
1415 ; CHECK-NEXT:    ret
1416   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1417   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1418   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %allones, i32 %evl)
1419   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1420   ret <8 x double> %u
1423 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) {
1424 ; CHECK-LABEL: vfmacc_vv_v8f64_unmasked:
1425 ; CHECK:       # %bb.0:
1426 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
1427 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
1428 ; CHECK-NEXT:    vmv4r.v v8, v16
1429 ; CHECK-NEXT:    ret
1430   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1431   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1432   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %allones, i32 %evl)
1433   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %allones, <8 x double> %v, <8 x double> %c, i32 %evl)
1434   ret <8 x double> %u
1437 define <8 x double> @vfmacc_vf_v8f64(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {
1438 ; CHECK-LABEL: vfmacc_vf_v8f64:
1439 ; CHECK:       # %bb.0:
1440 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1441 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1442 ; CHECK-NEXT:    vmv4r.v v8, v12
1443 ; CHECK-NEXT:    ret
1444   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1445   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1446   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1447   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1448   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> %allones, i32 %evl)
1449   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1450   ret <8 x double> %u
1453 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) {
1454 ; CHECK-LABEL: vfmacc_vf_v8f64_commute:
1455 ; CHECK:       # %bb.0:
1456 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1457 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1458 ; CHECK-NEXT:    vmv4r.v v8, v12
1459 ; CHECK-NEXT:    ret
1460   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1461   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1462   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1463   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1464   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %va, <8 x double> %c, <8 x i1> %allones, i32 %evl)
1465   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1466   ret <8 x double> %u
1469 define <8 x double> @vfmacc_vf_v8f64_unmasked(<8 x double> %va, double %b, <8 x double> %c, i32 zeroext %evl) {
1470 ; CHECK-LABEL: vfmacc_vf_v8f64_unmasked:
1471 ; CHECK:       # %bb.0:
1472 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
1473 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
1474 ; CHECK-NEXT:    vmv4r.v v8, v12
1475 ; CHECK-NEXT:    ret
1476   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1477   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1478   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1479   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1480   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> %allones, i32 %evl)
1481   %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %allones, <8 x double> %v, <8 x double> %c, i32 %evl)
1482   ret <8 x double> %u
1485 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) {
1486 ; CHECK-LABEL: vfmacc_vv_v8f64_ta:
1487 ; CHECK:       # %bb.0:
1488 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1489 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1490 ; CHECK-NEXT:    vmv.v.v v8, v16
1491 ; CHECK-NEXT:    ret
1492   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1493   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1494   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %allones, i32 %evl)
1495   %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1496   ret <8 x double> %u
1499 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) {
1500 ; CHECK-LABEL: vfmacc_vf_v8f64_ta:
1501 ; CHECK:       # %bb.0:
1502 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1503 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1504 ; CHECK-NEXT:    vmv.v.v v8, v12
1505 ; CHECK-NEXT:    ret
1506   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1507   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1508   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1509   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1510   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> %allones, i32 %evl)
1511   %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1512   ret <8 x double> %u
1515 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) {
1516 ; CHECK-LABEL: vfmacc_vf_v8f64_commute_ta:
1517 ; CHECK:       # %bb.0:
1518 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1519 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1520 ; CHECK-NEXT:    vmv.v.v v8, v12
1521 ; CHECK-NEXT:    ret
1522   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1523   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1524   %splat = insertelement <8 x i1> poison, i1 -1, i32 0
1525   %allones = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer
1526   %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %va, <8 x double> %c, <8 x i1> %allones, i32 %evl)
1527   %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)
1528   ret <8 x double> %u