[llvm-objdump] - Remove one overload of reportError. NFCI.
[llvm-complete.git] / test / CodeGen / Thumb2 / mve-fmas.ll
blob52df51675eaabb58f1749837087c477ee17da718
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi, -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVE-FP
3 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi, -mattr=+mve.fp -fp-contract=fast -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVE-VMLA
4 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+mve,+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVE
6 define arm_aapcs_vfpcc <8 x half> @vfma16_v1(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
7 ; CHECK-MVE-FP-LABEL: vfma16_v1:
8 ; CHECK-MVE-FP:       @ %bb.0: @ %entry
9 ; CHECK-MVE-FP-NEXT:    vmul.f16 q1, q1, q2
10 ; CHECK-MVE-FP-NEXT:    vadd.f16 q0, q0, q1
11 ; CHECK-MVE-FP-NEXT:    bx lr
13 ; CHECK-MVE-VMLA-LABEL: vfma16_v1:
14 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
15 ; CHECK-MVE-VMLA-NEXT:    vfma.f16 q0, q1, q2
16 ; CHECK-MVE-VMLA-NEXT:    bx lr
18 ; CHECK-MVE-LABEL: vfma16_v1:
19 ; CHECK-MVE:       @ %bb.0: @ %entry
20 ; CHECK-MVE-NEXT:    .vsave {d8, d9, d10}
21 ; CHECK-MVE-NEXT:    vpush {d8, d9, d10}
22 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[0]
23 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[0]
24 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[0]
25 ; CHECK-MVE-NEXT:    vmov s14, r1
26 ; CHECK-MVE-NEXT:    vmov s13, r2
27 ; CHECK-MVE-NEXT:    vmov.u16 r1, q2[1]
28 ; CHECK-MVE-NEXT:    vmov s12, r0
29 ; CHECK-MVE-NEXT:    vmov.u16 r2, q1[1]
30 ; CHECK-MVE-NEXT:    vmla.f16 s13, s14, s12
31 ; CHECK-MVE-NEXT:    vmov.u16 r3, q0[1]
32 ; CHECK-MVE-NEXT:    vmov r0, s13
33 ; CHECK-MVE-NEXT:    vmov s14, r2
34 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[2]
35 ; CHECK-MVE-NEXT:    vmov s12, r1
36 ; CHECK-MVE-NEXT:    vmov s13, r3
37 ; CHECK-MVE-NEXT:    vmla.f16 s13, s14, s12
38 ; CHECK-MVE-NEXT:    vmov s20, r2
39 ; CHECK-MVE-NEXT:    vmov r1, s13
40 ; CHECK-MVE-NEXT:    vmov.16 q3[0], r0
41 ; CHECK-MVE-NEXT:    vmov.16 q3[1], r1
42 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[2]
43 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[2]
44 ; CHECK-MVE-NEXT:    vmov s16, r0
45 ; CHECK-MVE-NEXT:    vmov s18, r1
46 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[4]
47 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
48 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[4]
49 ; CHECK-MVE-NEXT:    vmov r0, s20
50 ; CHECK-MVE-NEXT:    vmov.16 q3[2], r0
51 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[3]
52 ; CHECK-MVE-NEXT:    vmov s16, r0
53 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[3]
54 ; CHECK-MVE-NEXT:    vmov s18, r0
55 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[3]
56 ; CHECK-MVE-NEXT:    vmov s20, r0
57 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
58 ; CHECK-MVE-NEXT:    vmov s18, r1
59 ; CHECK-MVE-NEXT:    vmov r0, s20
60 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[6]
61 ; CHECK-MVE-NEXT:    vmov.16 q3[3], r0
62 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[4]
63 ; CHECK-MVE-NEXT:    vmov s20, r2
64 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[6]
65 ; CHECK-MVE-NEXT:    vmov s16, r0
66 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
67 ; CHECK-MVE-NEXT:    vmov r0, s20
68 ; CHECK-MVE-NEXT:    vmov.16 q3[4], r0
69 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[5]
70 ; CHECK-MVE-NEXT:    vmov s16, r0
71 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[5]
72 ; CHECK-MVE-NEXT:    vmov s18, r0
73 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[5]
74 ; CHECK-MVE-NEXT:    vmov s20, r0
75 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
76 ; CHECK-MVE-NEXT:    vmov s18, r1
77 ; CHECK-MVE-NEXT:    vmov r0, s20
78 ; CHECK-MVE-NEXT:    vmov.16 q3[5], r0
79 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[6]
80 ; CHECK-MVE-NEXT:    vmov s16, r0
81 ; CHECK-MVE-NEXT:    vmov s20, r2
82 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
83 ; CHECK-MVE-NEXT:    vmov r0, s20
84 ; CHECK-MVE-NEXT:    vmov.16 q3[6], r0
85 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[7]
86 ; CHECK-MVE-NEXT:    vmov s8, r0
87 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[7]
88 ; CHECK-MVE-NEXT:    vmov s4, r0
89 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[7]
90 ; CHECK-MVE-NEXT:    vmov s0, r0
91 ; CHECK-MVE-NEXT:    vmla.f16 s0, s4, s8
92 ; CHECK-MVE-NEXT:    vmov r0, s0
93 ; CHECK-MVE-NEXT:    vmov.16 q3[7], r0
94 ; CHECK-MVE-NEXT:    vmov q0, q3
95 ; CHECK-MVE-NEXT:    vpop {d8, d9, d10}
96 ; CHECK-MVE-NEXT:    bx lr
97 entry:
98   %0 = fmul <8 x half> %src2, %src3
99   %1 = fadd <8 x half> %src1, %0
100   ret <8 x half> %1
103 define arm_aapcs_vfpcc <8 x half> @vfma16_v2(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
104 ; CHECK-MVE-FP-LABEL: vfma16_v2:
105 ; CHECK-MVE-FP:       @ %bb.0: @ %entry
106 ; CHECK-MVE-FP-NEXT:    vmul.f16 q1, q1, q2
107 ; CHECK-MVE-FP-NEXT:    vadd.f16 q0, q1, q0
108 ; CHECK-MVE-FP-NEXT:    bx lr
110 ; CHECK-MVE-VMLA-LABEL: vfma16_v2:
111 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
112 ; CHECK-MVE-VMLA-NEXT:    vfma.f16 q0, q1, q2
113 ; CHECK-MVE-VMLA-NEXT:    bx lr
115 ; CHECK-MVE-LABEL: vfma16_v2:
116 ; CHECK-MVE:       @ %bb.0: @ %entry
117 ; CHECK-MVE-NEXT:    .vsave {d8, d9, d10}
118 ; CHECK-MVE-NEXT:    vpush {d8, d9, d10}
119 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[0]
120 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[0]
121 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[0]
122 ; CHECK-MVE-NEXT:    vmov s14, r1
123 ; CHECK-MVE-NEXT:    vmov s13, r2
124 ; CHECK-MVE-NEXT:    vmov.u16 r1, q2[1]
125 ; CHECK-MVE-NEXT:    vmov s12, r0
126 ; CHECK-MVE-NEXT:    vmov.u16 r2, q1[1]
127 ; CHECK-MVE-NEXT:    vmla.f16 s13, s14, s12
128 ; CHECK-MVE-NEXT:    vmov.u16 r3, q0[1]
129 ; CHECK-MVE-NEXT:    vmov r0, s13
130 ; CHECK-MVE-NEXT:    vmov s14, r2
131 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[2]
132 ; CHECK-MVE-NEXT:    vmov s12, r1
133 ; CHECK-MVE-NEXT:    vmov s13, r3
134 ; CHECK-MVE-NEXT:    vmla.f16 s13, s14, s12
135 ; CHECK-MVE-NEXT:    vmov s20, r2
136 ; CHECK-MVE-NEXT:    vmov r1, s13
137 ; CHECK-MVE-NEXT:    vmov.16 q3[0], r0
138 ; CHECK-MVE-NEXT:    vmov.16 q3[1], r1
139 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[2]
140 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[2]
141 ; CHECK-MVE-NEXT:    vmov s16, r0
142 ; CHECK-MVE-NEXT:    vmov s18, r1
143 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[4]
144 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
145 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[4]
146 ; CHECK-MVE-NEXT:    vmov r0, s20
147 ; CHECK-MVE-NEXT:    vmov.16 q3[2], r0
148 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[3]
149 ; CHECK-MVE-NEXT:    vmov s16, r0
150 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[3]
151 ; CHECK-MVE-NEXT:    vmov s18, r0
152 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[3]
153 ; CHECK-MVE-NEXT:    vmov s20, r0
154 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
155 ; CHECK-MVE-NEXT:    vmov s18, r1
156 ; CHECK-MVE-NEXT:    vmov r0, s20
157 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[6]
158 ; CHECK-MVE-NEXT:    vmov.16 q3[3], r0
159 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[4]
160 ; CHECK-MVE-NEXT:    vmov s20, r2
161 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[6]
162 ; CHECK-MVE-NEXT:    vmov s16, r0
163 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
164 ; CHECK-MVE-NEXT:    vmov r0, s20
165 ; CHECK-MVE-NEXT:    vmov.16 q3[4], r0
166 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[5]
167 ; CHECK-MVE-NEXT:    vmov s16, r0
168 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[5]
169 ; CHECK-MVE-NEXT:    vmov s18, r0
170 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[5]
171 ; CHECK-MVE-NEXT:    vmov s20, r0
172 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
173 ; CHECK-MVE-NEXT:    vmov s18, r1
174 ; CHECK-MVE-NEXT:    vmov r0, s20
175 ; CHECK-MVE-NEXT:    vmov.16 q3[5], r0
176 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[6]
177 ; CHECK-MVE-NEXT:    vmov s16, r0
178 ; CHECK-MVE-NEXT:    vmov s20, r2
179 ; CHECK-MVE-NEXT:    vmla.f16 s20, s18, s16
180 ; CHECK-MVE-NEXT:    vmov r0, s20
181 ; CHECK-MVE-NEXT:    vmov.16 q3[6], r0
182 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[7]
183 ; CHECK-MVE-NEXT:    vmov s8, r0
184 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[7]
185 ; CHECK-MVE-NEXT:    vmov s4, r0
186 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[7]
187 ; CHECK-MVE-NEXT:    vmov s0, r0
188 ; CHECK-MVE-NEXT:    vmla.f16 s0, s4, s8
189 ; CHECK-MVE-NEXT:    vmov r0, s0
190 ; CHECK-MVE-NEXT:    vmov.16 q3[7], r0
191 ; CHECK-MVE-NEXT:    vmov q0, q3
192 ; CHECK-MVE-NEXT:    vpop {d8, d9, d10}
193 ; CHECK-MVE-NEXT:    bx lr
194 entry:
195   %0 = fmul <8 x half> %src2, %src3
196   %1 = fadd <8 x half> %0, %src1
197   ret <8 x half> %1
200 define arm_aapcs_vfpcc <8 x half> @vfms16(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
201 ; CHECK-MVE-FP-LABEL: vfms16:
202 ; CHECK-MVE-FP:       @ %bb.0: @ %entry
203 ; CHECK-MVE-FP-NEXT:    vmul.f16 q1, q1, q2
204 ; CHECK-MVE-FP-NEXT:    vsub.f16 q0, q0, q1
205 ; CHECK-MVE-FP-NEXT:    bx lr
207 ; CHECK-MVE-VMLA-LABEL: vfms16:
208 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
209 ; CHECK-MVE-VMLA-NEXT:    vfms.f16 q0, q1, q2
210 ; CHECK-MVE-VMLA-NEXT:    bx lr
212 ; CHECK-MVE-LABEL: vfms16:
213 ; CHECK-MVE:       @ %bb.0: @ %entry
214 ; CHECK-MVE-NEXT:    .vsave {d8, d9, d10}
215 ; CHECK-MVE-NEXT:    vpush {d8, d9, d10}
216 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[0]
217 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[0]
218 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[0]
219 ; CHECK-MVE-NEXT:    vmov s14, r1
220 ; CHECK-MVE-NEXT:    vmov s13, r2
221 ; CHECK-MVE-NEXT:    vmov.u16 r1, q2[1]
222 ; CHECK-MVE-NEXT:    vmov s12, r0
223 ; CHECK-MVE-NEXT:    vmov.u16 r2, q1[1]
224 ; CHECK-MVE-NEXT:    vmls.f16 s13, s14, s12
225 ; CHECK-MVE-NEXT:    vmov.u16 r3, q0[1]
226 ; CHECK-MVE-NEXT:    vmov r0, s13
227 ; CHECK-MVE-NEXT:    vmov s14, r2
228 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[2]
229 ; CHECK-MVE-NEXT:    vmov s12, r1
230 ; CHECK-MVE-NEXT:    vmov s13, r3
231 ; CHECK-MVE-NEXT:    vmls.f16 s13, s14, s12
232 ; CHECK-MVE-NEXT:    vmov s20, r2
233 ; CHECK-MVE-NEXT:    vmov r1, s13
234 ; CHECK-MVE-NEXT:    vmov.16 q3[0], r0
235 ; CHECK-MVE-NEXT:    vmov.16 q3[1], r1
236 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[2]
237 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[2]
238 ; CHECK-MVE-NEXT:    vmov s16, r0
239 ; CHECK-MVE-NEXT:    vmov s18, r1
240 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[4]
241 ; CHECK-MVE-NEXT:    vmls.f16 s20, s18, s16
242 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[4]
243 ; CHECK-MVE-NEXT:    vmov r0, s20
244 ; CHECK-MVE-NEXT:    vmov.16 q3[2], r0
245 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[3]
246 ; CHECK-MVE-NEXT:    vmov s16, r0
247 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[3]
248 ; CHECK-MVE-NEXT:    vmov s18, r0
249 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[3]
250 ; CHECK-MVE-NEXT:    vmov s20, r0
251 ; CHECK-MVE-NEXT:    vmls.f16 s20, s18, s16
252 ; CHECK-MVE-NEXT:    vmov s18, r1
253 ; CHECK-MVE-NEXT:    vmov r0, s20
254 ; CHECK-MVE-NEXT:    vmov.u16 r1, q1[6]
255 ; CHECK-MVE-NEXT:    vmov.16 q3[3], r0
256 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[4]
257 ; CHECK-MVE-NEXT:    vmov s20, r2
258 ; CHECK-MVE-NEXT:    vmov.u16 r2, q0[6]
259 ; CHECK-MVE-NEXT:    vmov s16, r0
260 ; CHECK-MVE-NEXT:    vmls.f16 s20, s18, s16
261 ; CHECK-MVE-NEXT:    vmov r0, s20
262 ; CHECK-MVE-NEXT:    vmov.16 q3[4], r0
263 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[5]
264 ; CHECK-MVE-NEXT:    vmov s16, r0
265 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[5]
266 ; CHECK-MVE-NEXT:    vmov s18, r0
267 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[5]
268 ; CHECK-MVE-NEXT:    vmov s20, r0
269 ; CHECK-MVE-NEXT:    vmls.f16 s20, s18, s16
270 ; CHECK-MVE-NEXT:    vmov s18, r1
271 ; CHECK-MVE-NEXT:    vmov r0, s20
272 ; CHECK-MVE-NEXT:    vmov.16 q3[5], r0
273 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[6]
274 ; CHECK-MVE-NEXT:    vmov s16, r0
275 ; CHECK-MVE-NEXT:    vmov s20, r2
276 ; CHECK-MVE-NEXT:    vmls.f16 s20, s18, s16
277 ; CHECK-MVE-NEXT:    vmov r0, s20
278 ; CHECK-MVE-NEXT:    vmov.16 q3[6], r0
279 ; CHECK-MVE-NEXT:    vmov.u16 r0, q2[7]
280 ; CHECK-MVE-NEXT:    vmov s8, r0
281 ; CHECK-MVE-NEXT:    vmov.u16 r0, q1[7]
282 ; CHECK-MVE-NEXT:    vmov s4, r0
283 ; CHECK-MVE-NEXT:    vmov.u16 r0, q0[7]
284 ; CHECK-MVE-NEXT:    vmov s0, r0
285 ; CHECK-MVE-NEXT:    vmls.f16 s0, s4, s8
286 ; CHECK-MVE-NEXT:    vmov r0, s0
287 ; CHECK-MVE-NEXT:    vmov.16 q3[7], r0
288 ; CHECK-MVE-NEXT:    vmov q0, q3
289 ; CHECK-MVE-NEXT:    vpop {d8, d9, d10}
290 ; CHECK-MVE-NEXT:    bx lr
291 entry:
292   %0 = fmul <8 x half> %src2, %src3
293   %1 = fsub <8 x half> %src1, %0
294   ret <8 x half> %1
297 define arm_aapcs_vfpcc <4 x float> @vfma32_v1(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
298 ; CHECK-MVE-FP-LABEL: vfma32_v1:
299 ; CHECK-MVE-FP:       @ %bb.0: @ %entry
300 ; CHECK-MVE-FP-NEXT:    vmul.f32 q1, q1, q2
301 ; CHECK-MVE-FP-NEXT:    vadd.f32 q0, q0, q1
302 ; CHECK-MVE-FP-NEXT:    bx lr
304 ; CHECK-MVE-VMLA-LABEL: vfma32_v1:
305 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
306 ; CHECK-MVE-VMLA-NEXT:    vfma.f32 q0, q1, q2
307 ; CHECK-MVE-VMLA-NEXT:    bx lr
309 ; CHECK-MVE-LABEL: vfma32_v1:
310 ; CHECK-MVE:       @ %bb.0: @ %entry
311 ; CHECK-MVE-NEXT:    vmla.f32 s3, s7, s11
312 ; CHECK-MVE-NEXT:    vmla.f32 s2, s6, s10
313 ; CHECK-MVE-NEXT:    vmla.f32 s1, s5, s9
314 ; CHECK-MVE-NEXT:    vmla.f32 s0, s4, s8
315 ; CHECK-MVE-NEXT:    bx lr
316 entry:
317   %0 = fmul <4 x float> %src2, %src3
318   %1 = fadd <4 x float> %src1, %0
319   ret <4 x float> %1
322 define arm_aapcs_vfpcc <4 x float> @vfma32_v2(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
323 ; CHECK-MVE-FP-LABEL: vfma32_v2:
324 ; CHECK-MVE-FP:       @ %bb.0: @ %entry
325 ; CHECK-MVE-FP-NEXT:    vmul.f32 q1, q1, q2
326 ; CHECK-MVE-FP-NEXT:    vadd.f32 q0, q1, q0
327 ; CHECK-MVE-FP-NEXT:    bx lr
329 ; CHECK-MVE-VMLA-LABEL: vfma32_v2:
330 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
331 ; CHECK-MVE-VMLA-NEXT:    vfma.f32 q0, q1, q2
332 ; CHECK-MVE-VMLA-NEXT:    bx lr
334 ; CHECK-MVE-LABEL: vfma32_v2:
335 ; CHECK-MVE:       @ %bb.0: @ %entry
336 ; CHECK-MVE-NEXT:    vmla.f32 s3, s7, s11
337 ; CHECK-MVE-NEXT:    vmla.f32 s2, s6, s10
338 ; CHECK-MVE-NEXT:    vmla.f32 s1, s5, s9
339 ; CHECK-MVE-NEXT:    vmla.f32 s0, s4, s8
340 ; CHECK-MVE-NEXT:    bx lr
341 entry:
342   %0 = fmul <4 x float> %src2, %src3
343   %1 = fadd <4 x float> %0, %src1
344   ret <4 x float> %1
347 define arm_aapcs_vfpcc <4 x float> @vfms32(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
348 ; CHECK-MVE-FP-LABEL: vfms32:
349 ; CHECK-MVE-FP:       @ %bb.0: @ %entry
350 ; CHECK-MVE-FP-NEXT:    vmul.f32 q1, q1, q2
351 ; CHECK-MVE-FP-NEXT:    vsub.f32 q0, q0, q1
352 ; CHECK-MVE-FP-NEXT:    bx lr
354 ; CHECK-MVE-VMLA-LABEL: vfms32:
355 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
356 ; CHECK-MVE-VMLA-NEXT:    vfms.f32 q0, q1, q2
357 ; CHECK-MVE-VMLA-NEXT:    bx lr
359 ; CHECK-MVE-LABEL: vfms32:
360 ; CHECK-MVE:       @ %bb.0: @ %entry
361 ; CHECK-MVE-NEXT:    vmls.f32 s3, s7, s11
362 ; CHECK-MVE-NEXT:    vmls.f32 s2, s6, s10
363 ; CHECK-MVE-NEXT:    vmls.f32 s1, s5, s9
364 ; CHECK-MVE-NEXT:    vmls.f32 s0, s4, s8
365 ; CHECK-MVE-NEXT:    bx lr
366 entry:
367   %0 = fmul <4 x float> %src2, %src3
368   %1 = fsub <4 x float> %src1, %0
369   ret <4 x float> %1