1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s
4 declare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)
5 declare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)
7 declare { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32, i32, i32, i32, i32, <8 x i16>, <8 x i16>)
8 declare { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32, i32, i32, i32, i32, <4 x i32>, <4 x i32>)
9 declare { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32, i32, i32, i32, i32, <4 x i32>, <4 x i32>)
11 declare { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32, i32, i32, i32, i32, <8 x i16>, <8 x i16>, <8 x i1>)
12 declare { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32, i32, i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i1>)
13 declare { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32, i32, i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i1>)
15 define arm_aapcs_vfpcc i64 @test_vmlaldavaq_s16(i64 %a, <8 x i16> %b, <8 x i16> %c) {
16 ; CHECK-LABEL: test_vmlaldavaq_s16:
17 ; CHECK: @ %bb.0: @ %entry
18 ; CHECK-NEXT: vmlalva.s16 r0, r1, q0, q1
22 %1 = trunc i64 %0 to i32
23 %2 = trunc i64 %a to i32
24 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)
25 %4 = extractvalue { i32, i32 } %3, 1
26 %5 = zext i32 %4 to i64
28 %7 = extractvalue { i32, i32 } %3, 0
29 %8 = zext i32 %7 to i64
34 define arm_aapcs_vfpcc i64 @test_vmlaldavaq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
35 ; CHECK-LABEL: test_vmlaldavaq_s32:
36 ; CHECK: @ %bb.0: @ %entry
37 ; CHECK-NEXT: vmlalva.s32 r0, r1, q0, q1
41 %1 = trunc i64 %0 to i32
42 %2 = trunc i64 %a to i32
43 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
44 %4 = extractvalue { i32, i32 } %3, 1
45 %5 = zext i32 %4 to i64
47 %7 = extractvalue { i32, i32 } %3, 0
48 %8 = zext i32 %7 to i64
53 define arm_aapcs_vfpcc i64 @test_vmlaldavaq_u16(i64 %a, <8 x i16> %b, <8 x i16> %c) {
54 ; CHECK-LABEL: test_vmlaldavaq_u16:
55 ; CHECK: @ %bb.0: @ %entry
56 ; CHECK-NEXT: vmlalva.u16 r0, r1, q0, q1
60 %1 = trunc i64 %0 to i32
61 %2 = trunc i64 %a to i32
62 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 1, i32 0, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)
63 %4 = extractvalue { i32, i32 } %3, 1
64 %5 = zext i32 %4 to i64
66 %7 = extractvalue { i32, i32 } %3, 0
67 %8 = zext i32 %7 to i64
72 define arm_aapcs_vfpcc i64 @test_vmlaldavaq_u32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
73 ; CHECK-LABEL: test_vmlaldavaq_u32:
74 ; CHECK: @ %bb.0: @ %entry
75 ; CHECK-NEXT: vmlalva.u32 r0, r1, q0, q1
79 %1 = trunc i64 %0 to i32
80 %2 = trunc i64 %a to i32
81 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 1, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
82 %4 = extractvalue { i32, i32 } %3, 1
83 %5 = zext i32 %4 to i64
85 %7 = extractvalue { i32, i32 } %3, 0
86 %8 = zext i32 %7 to i64
91 define arm_aapcs_vfpcc i64 @test_vmlaldavaxq_s16(i64 %a, <8 x i16> %b, <8 x i16> %c) {
92 ; CHECK-LABEL: test_vmlaldavaxq_s16:
93 ; CHECK: @ %bb.0: @ %entry
94 ; CHECK-NEXT: vmlaldavax.s16 r0, r1, q0, q1
98 %1 = trunc i64 %0 to i32
99 %2 = trunc i64 %a to i32
100 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 1, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)
101 %4 = extractvalue { i32, i32 } %3, 1
102 %5 = zext i32 %4 to i64
104 %7 = extractvalue { i32, i32 } %3, 0
105 %8 = zext i32 %7 to i64
110 define arm_aapcs_vfpcc i64 @test_vmlaldavaxq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
111 ; CHECK-LABEL: test_vmlaldavaxq_s32:
112 ; CHECK: @ %bb.0: @ %entry
113 ; CHECK-NEXT: vmlaldavax.s32 r0, r1, q0, q1
117 %1 = trunc i64 %0 to i32
118 %2 = trunc i64 %a to i32
119 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 0, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
120 %4 = extractvalue { i32, i32 } %3, 1
121 %5 = zext i32 %4 to i64
123 %7 = extractvalue { i32, i32 } %3, 0
124 %8 = zext i32 %7 to i64
129 define arm_aapcs_vfpcc i64 @test_vmlsldavaq_s16(i64 %a, <8 x i16> %b, <8 x i16> %c) {
130 ; CHECK-LABEL: test_vmlsldavaq_s16:
131 ; CHECK: @ %bb.0: @ %entry
132 ; CHECK-NEXT: vmlsldava.s16 r0, r1, q0, q1
136 %1 = trunc i64 %0 to i32
137 %2 = trunc i64 %a to i32
138 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 1, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)
139 %4 = extractvalue { i32, i32 } %3, 1
140 %5 = zext i32 %4 to i64
142 %7 = extractvalue { i32, i32 } %3, 0
143 %8 = zext i32 %7 to i64
148 define arm_aapcs_vfpcc i64 @test_vmlsldavaq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
149 ; CHECK-LABEL: test_vmlsldavaq_s32:
150 ; CHECK: @ %bb.0: @ %entry
151 ; CHECK-NEXT: vmlsldava.s32 r0, r1, q0, q1
155 %1 = trunc i64 %0 to i32
156 %2 = trunc i64 %a to i32
157 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 1, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
158 %4 = extractvalue { i32, i32 } %3, 1
159 %5 = zext i32 %4 to i64
161 %7 = extractvalue { i32, i32 } %3, 0
162 %8 = zext i32 %7 to i64
167 define arm_aapcs_vfpcc i64 @test_vmlsldaxvaq_s16(i64 %a, <8 x i16> %b, <8 x i16> %c) {
168 ; CHECK-LABEL: test_vmlsldaxvaq_s16:
169 ; CHECK: @ %bb.0: @ %entry
170 ; CHECK-NEXT: vmlsldavax.s16 r0, r1, q0, q1
174 %1 = trunc i64 %0 to i32
175 %2 = trunc i64 %a to i32
176 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 1, i32 1, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)
177 %4 = extractvalue { i32, i32 } %3, 1
178 %5 = zext i32 %4 to i64
180 %7 = extractvalue { i32, i32 } %3, 0
181 %8 = zext i32 %7 to i64
186 define arm_aapcs_vfpcc i64 @test_vmlsldavaxq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
187 ; CHECK-LABEL: test_vmlsldavaxq_s32:
188 ; CHECK: @ %bb.0: @ %entry
189 ; CHECK-NEXT: vmlsldavax.s32 r0, r1, q0, q1
193 %1 = trunc i64 %0 to i32
194 %2 = trunc i64 %a to i32
195 %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 1, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
196 %4 = extractvalue { i32, i32 } %3, 1
197 %5 = zext i32 %4 to i64
199 %7 = extractvalue { i32, i32 } %3, 0
200 %8 = zext i32 %7 to i64
205 define arm_aapcs_vfpcc i64 @test_vrmlaldavhaq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
206 ; CHECK-LABEL: test_vrmlaldavhaq_s32:
207 ; CHECK: @ %bb.0: @ %entry
208 ; CHECK-NEXT: vrmlalvha.s32 r0, r1, q0, q1
212 %1 = trunc i64 %0 to i32
213 %2 = trunc i64 %a to i32
214 %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
215 %4 = extractvalue { i32, i32 } %3, 1
216 %5 = zext i32 %4 to i64
218 %7 = extractvalue { i32, i32 } %3, 0
219 %8 = zext i32 %7 to i64
224 define arm_aapcs_vfpcc i64 @test_vrmlaldavhaq_u32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
225 ; CHECK-LABEL: test_vrmlaldavhaq_u32:
226 ; CHECK: @ %bb.0: @ %entry
227 ; CHECK-NEXT: vrmlalvha.u32 r0, r1, q0, q1
231 %1 = trunc i64 %0 to i32
232 %2 = trunc i64 %a to i32
233 %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 1, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
234 %4 = extractvalue { i32, i32 } %3, 1
235 %5 = zext i32 %4 to i64
237 %7 = extractvalue { i32, i32 } %3, 0
238 %8 = zext i32 %7 to i64
243 define arm_aapcs_vfpcc i64 @test_vrmlaldavhaxq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
244 ; CHECK-LABEL: test_vrmlaldavhaxq_s32:
245 ; CHECK: @ %bb.0: @ %entry
246 ; CHECK-NEXT: vrmlaldavhax.s32 r0, r1, q0, q1
250 %1 = trunc i64 %0 to i32
251 %2 = trunc i64 %a to i32
252 %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 0, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
253 %4 = extractvalue { i32, i32 } %3, 1
254 %5 = zext i32 %4 to i64
256 %7 = extractvalue { i32, i32 } %3, 0
257 %8 = zext i32 %7 to i64
262 define arm_aapcs_vfpcc i64 @test_vrmlsldavhaq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
263 ; CHECK-LABEL: test_vrmlsldavhaq_s32:
264 ; CHECK: @ %bb.0: @ %entry
265 ; CHECK-NEXT: vrmlsldavha.s32 r0, r1, q0, q1
269 %1 = trunc i64 %0 to i32
270 %2 = trunc i64 %a to i32
271 %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 1, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
272 %4 = extractvalue { i32, i32 } %3, 1
273 %5 = zext i32 %4 to i64
275 %7 = extractvalue { i32, i32 } %3, 0
276 %8 = zext i32 %7 to i64
281 define arm_aapcs_vfpcc i64 @test_vrmlsldavhaxq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {
282 ; CHECK-LABEL: test_vrmlsldavhaxq_s32:
283 ; CHECK: @ %bb.0: @ %entry
284 ; CHECK-NEXT: vrmlsldavhax.s32 r0, r1, q0, q1
288 %1 = trunc i64 %0 to i32
289 %2 = trunc i64 %a to i32
290 %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 1, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)
291 %4 = extractvalue { i32, i32 } %3, 1
292 %5 = zext i32 %4 to i64
294 %7 = extractvalue { i32, i32 } %3, 0
295 %8 = zext i32 %7 to i64
300 define arm_aapcs_vfpcc i64 @test_vmlaldavaq_p_s16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
301 ; CHECK-LABEL: test_vmlaldavaq_p_s16:
302 ; CHECK: @ %bb.0: @ %entry
303 ; CHECK-NEXT: vmsr p0, r2
305 ; CHECK-NEXT: vmlalvat.s16 r0, r1, q0, q1
309 %1 = trunc i64 %0 to i32
310 %2 = trunc i64 %a to i32
311 %3 = zext i16 %p to i32
312 %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)
313 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)
314 %6 = extractvalue { i32, i32 } %5, 1
315 %7 = zext i32 %6 to i64
317 %9 = extractvalue { i32, i32 } %5, 0
318 %10 = zext i32 %9 to i64
323 define arm_aapcs_vfpcc i64 @test_vmlaldavaq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
324 ; CHECK-LABEL: test_vmlaldavaq_p_s32:
325 ; CHECK: @ %bb.0: @ %entry
326 ; CHECK-NEXT: vmsr p0, r2
328 ; CHECK-NEXT: vmlalvat.s32 r0, r1, q0, q1
332 %1 = trunc i64 %0 to i32
333 %2 = trunc i64 %a to i32
334 %3 = zext i16 %p to i32
335 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
336 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
337 %6 = extractvalue { i32, i32 } %5, 1
338 %7 = zext i32 %6 to i64
340 %9 = extractvalue { i32, i32 } %5, 0
341 %10 = zext i32 %9 to i64
346 define arm_aapcs_vfpcc i64 @test_vmlaldavaq_p_u16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
347 ; CHECK-LABEL: test_vmlaldavaq_p_u16:
348 ; CHECK: @ %bb.0: @ %entry
349 ; CHECK-NEXT: vmsr p0, r2
351 ; CHECK-NEXT: vmlalvat.u16 r0, r1, q0, q1
355 %1 = trunc i64 %0 to i32
356 %2 = trunc i64 %a to i32
357 %3 = zext i16 %p to i32
358 %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)
359 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 1, i32 0, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)
360 %6 = extractvalue { i32, i32 } %5, 1
361 %7 = zext i32 %6 to i64
363 %9 = extractvalue { i32, i32 } %5, 0
364 %10 = zext i32 %9 to i64
369 define arm_aapcs_vfpcc i64 @test_vmlaldavaq_p_u32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
370 ; CHECK-LABEL: test_vmlaldavaq_p_u32:
371 ; CHECK: @ %bb.0: @ %entry
372 ; CHECK-NEXT: vmsr p0, r2
374 ; CHECK-NEXT: vmlalvat.u32 r0, r1, q0, q1
378 %1 = trunc i64 %0 to i32
379 %2 = trunc i64 %a to i32
380 %3 = zext i16 %p to i32
381 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
382 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
383 %6 = extractvalue { i32, i32 } %5, 1
384 %7 = zext i32 %6 to i64
386 %9 = extractvalue { i32, i32 } %5, 0
387 %10 = zext i32 %9 to i64
392 define arm_aapcs_vfpcc i64 @test_vmlaldavaxq_p_s16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
393 ; CHECK-LABEL: test_vmlaldavaxq_p_s16:
394 ; CHECK: @ %bb.0: @ %entry
395 ; CHECK-NEXT: vmsr p0, r2
397 ; CHECK-NEXT: vmlaldavaxt.s16 r0, r1, q0, q1
401 %1 = trunc i64 %0 to i32
402 %2 = trunc i64 %a to i32
403 %3 = zext i16 %p to i32
404 %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)
405 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 1, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)
406 %6 = extractvalue { i32, i32 } %5, 1
407 %7 = zext i32 %6 to i64
409 %9 = extractvalue { i32, i32 } %5, 0
410 %10 = zext i32 %9 to i64
415 define arm_aapcs_vfpcc i64 @test_vmlaldavaxq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
416 ; CHECK-LABEL: test_vmlaldavaxq_p_s32:
417 ; CHECK: @ %bb.0: @ %entry
418 ; CHECK-NEXT: vmsr p0, r2
420 ; CHECK-NEXT: vmlaldavaxt.s32 r0, r1, q0, q1
424 %1 = trunc i64 %0 to i32
425 %2 = trunc i64 %a to i32
426 %3 = zext i16 %p to i32
427 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
428 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
429 %6 = extractvalue { i32, i32 } %5, 1
430 %7 = zext i32 %6 to i64
432 %9 = extractvalue { i32, i32 } %5, 0
433 %10 = zext i32 %9 to i64
438 define arm_aapcs_vfpcc i64 @test_vmlsldavaq_p_s16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
439 ; CHECK-LABEL: test_vmlsldavaq_p_s16:
440 ; CHECK: @ %bb.0: @ %entry
441 ; CHECK-NEXT: vmsr p0, r2
443 ; CHECK-NEXT: vmlsldavat.s16 r0, r1, q0, q1
447 %1 = trunc i64 %0 to i32
448 %2 = trunc i64 %a to i32
449 %3 = zext i16 %p to i32
450 %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)
451 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)
452 %6 = extractvalue { i32, i32 } %5, 1
453 %7 = zext i32 %6 to i64
455 %9 = extractvalue { i32, i32 } %5, 0
456 %10 = zext i32 %9 to i64
461 define arm_aapcs_vfpcc i64 @test_vmlsldavaq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
462 ; CHECK-LABEL: test_vmlsldavaq_p_s32:
463 ; CHECK: @ %bb.0: @ %entry
464 ; CHECK-NEXT: vmsr p0, r2
466 ; CHECK-NEXT: vmlsldavat.s32 r0, r1, q0, q1
470 %1 = trunc i64 %0 to i32
471 %2 = trunc i64 %a to i32
472 %3 = zext i16 %p to i32
473 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
474 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
475 %6 = extractvalue { i32, i32 } %5, 1
476 %7 = zext i32 %6 to i64
478 %9 = extractvalue { i32, i32 } %5, 0
479 %10 = zext i32 %9 to i64
484 define arm_aapcs_vfpcc i64 @test_vmlsldaxvaq_p_s16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
485 ; CHECK-LABEL: test_vmlsldaxvaq_p_s16:
486 ; CHECK: @ %bb.0: @ %entry
487 ; CHECK-NEXT: vmsr p0, r2
489 ; CHECK-NEXT: vmlsldavaxt.s16 r0, r1, q0, q1
493 %1 = trunc i64 %0 to i32
494 %2 = trunc i64 %a to i32
495 %3 = zext i16 %p to i32
496 %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)
497 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 1, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)
498 %6 = extractvalue { i32, i32 } %5, 1
499 %7 = zext i32 %6 to i64
501 %9 = extractvalue { i32, i32 } %5, 0
502 %10 = zext i32 %9 to i64
507 define arm_aapcs_vfpcc i64 @test_vmlsldavaxq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
508 ; CHECK-LABEL: test_vmlsldavaxq_p_s32:
509 ; CHECK: @ %bb.0: @ %entry
510 ; CHECK-NEXT: vmsr p0, r2
512 ; CHECK-NEXT: vmlsldavaxt.s32 r0, r1, q0, q1
516 %1 = trunc i64 %0 to i32
517 %2 = trunc i64 %a to i32
518 %3 = zext i16 %p to i32
519 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
520 %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
521 %6 = extractvalue { i32, i32 } %5, 1
522 %7 = zext i32 %6 to i64
524 %9 = extractvalue { i32, i32 } %5, 0
525 %10 = zext i32 %9 to i64
530 define arm_aapcs_vfpcc i64 @test_vrmlaldavhaq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
531 ; CHECK-LABEL: test_vrmlaldavhaq_p_s32:
532 ; CHECK: @ %bb.0: @ %entry
533 ; CHECK-NEXT: vmsr p0, r2
535 ; CHECK-NEXT: vrmlalvhat.s32 r0, r1, q0, q1
539 %1 = trunc i64 %0 to i32
540 %2 = trunc i64 %a to i32
541 %3 = zext i16 %p to i32
542 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
543 %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
544 %6 = extractvalue { i32, i32 } %5, 1
545 %7 = zext i32 %6 to i64
547 %9 = extractvalue { i32, i32 } %5, 0
548 %10 = zext i32 %9 to i64
553 define arm_aapcs_vfpcc i64 @test_vrmlaldavhaq_p_u32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
554 ; CHECK-LABEL: test_vrmlaldavhaq_p_u32:
555 ; CHECK: @ %bb.0: @ %entry
556 ; CHECK-NEXT: vmsr p0, r2
558 ; CHECK-NEXT: vrmlalvhat.u32 r0, r1, q0, q1
562 %1 = trunc i64 %0 to i32
563 %2 = trunc i64 %a to i32
564 %3 = zext i16 %p to i32
565 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
566 %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
567 %6 = extractvalue { i32, i32 } %5, 1
568 %7 = zext i32 %6 to i64
570 %9 = extractvalue { i32, i32 } %5, 0
571 %10 = zext i32 %9 to i64
576 define arm_aapcs_vfpcc i64 @test_vrmlaldavhaxq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
577 ; CHECK-LABEL: test_vrmlaldavhaxq_p_s32:
578 ; CHECK: @ %bb.0: @ %entry
579 ; CHECK-NEXT: vmsr p0, r2
581 ; CHECK-NEXT: vrmlaldavhaxt.s32 r0, r1, q0, q1
585 %1 = trunc i64 %0 to i32
586 %2 = trunc i64 %a to i32
587 %3 = zext i16 %p to i32
588 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
589 %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
590 %6 = extractvalue { i32, i32 } %5, 1
591 %7 = zext i32 %6 to i64
593 %9 = extractvalue { i32, i32 } %5, 0
594 %10 = zext i32 %9 to i64
599 define arm_aapcs_vfpcc i64 @test_vrmlsldavhaq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
600 ; CHECK-LABEL: test_vrmlsldavhaq_p_s32:
601 ; CHECK: @ %bb.0: @ %entry
602 ; CHECK-NEXT: vmsr p0, r2
604 ; CHECK-NEXT: vrmlsldavhat.s32 r0, r1, q0, q1
608 %1 = trunc i64 %0 to i32
609 %2 = trunc i64 %a to i32
610 %3 = zext i16 %p to i32
611 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
612 %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
613 %6 = extractvalue { i32, i32 } %5, 1
614 %7 = zext i32 %6 to i64
616 %9 = extractvalue { i32, i32 } %5, 0
617 %10 = zext i32 %9 to i64
622 define arm_aapcs_vfpcc i64 @test_vrmlsldavhaxq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
623 ; CHECK-LABEL: test_vrmlsldavhaxq_p_s32:
624 ; CHECK: @ %bb.0: @ %entry
625 ; CHECK-NEXT: vmsr p0, r2
627 ; CHECK-NEXT: vrmlsldavhaxt.s32 r0, r1, q0, q1
631 %1 = trunc i64 %0 to i32
632 %2 = trunc i64 %a to i32
633 %3 = zext i16 %p to i32
634 %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)
635 %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)
636 %6 = extractvalue { i32, i32 } %5, 1
637 %7 = zext i32 %6 to i64
639 %9 = extractvalue { i32, i32 } %5, 0
640 %10 = zext i32 %9 to i64
645 define arm_aapcs_vfpcc i64 @test_vmlaldavq_s16(<8 x i16> %a, <8 x i16> %b) {
646 ; CHECK-LABEL: test_vmlaldavq_s16:
647 ; CHECK: @ %bb.0: @ %entry
648 ; CHECK-NEXT: vmlalv.s16 r0, r1, q0, q1
651 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)
652 %1 = extractvalue { i32, i32 } %0, 1
653 %2 = zext i32 %1 to i64
655 %4 = extractvalue { i32, i32 } %0, 0
656 %5 = zext i32 %4 to i64
661 define arm_aapcs_vfpcc i64 @test_vmlaldavq_s32(<4 x i32> %a, <4 x i32> %b) {
662 ; CHECK-LABEL: test_vmlaldavq_s32:
663 ; CHECK: @ %bb.0: @ %entry
664 ; CHECK-NEXT: vmlalv.s32 r0, r1, q0, q1
667 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
668 %1 = extractvalue { i32, i32 } %0, 1
669 %2 = zext i32 %1 to i64
671 %4 = extractvalue { i32, i32 } %0, 0
672 %5 = zext i32 %4 to i64
677 define arm_aapcs_vfpcc i64 @test_vmlaldavq_u16(<8 x i16> %a, <8 x i16> %b) {
678 ; CHECK-LABEL: test_vmlaldavq_u16:
679 ; CHECK: @ %bb.0: @ %entry
680 ; CHECK-NEXT: vmlalv.u16 r0, r1, q0, q1
683 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 1, i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)
684 %1 = extractvalue { i32, i32 } %0, 1
685 %2 = zext i32 %1 to i64
687 %4 = extractvalue { i32, i32 } %0, 0
688 %5 = zext i32 %4 to i64
693 define arm_aapcs_vfpcc i64 @test_vmlaldavq_u32(<4 x i32> %a, <4 x i32> %b) {
694 ; CHECK-LABEL: test_vmlaldavq_u32:
695 ; CHECK: @ %bb.0: @ %entry
696 ; CHECK-NEXT: vmlalv.u32 r0, r1, q0, q1
699 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
700 %1 = extractvalue { i32, i32 } %0, 1
701 %2 = zext i32 %1 to i64
703 %4 = extractvalue { i32, i32 } %0, 0
704 %5 = zext i32 %4 to i64
709 define arm_aapcs_vfpcc i64 @test_vmlaldavxq_s16(<8 x i16> %a, <8 x i16> %b) {
710 ; CHECK-LABEL: test_vmlaldavxq_s16:
711 ; CHECK: @ %bb.0: @ %entry
712 ; CHECK-NEXT: vmlaldavx.s16 r0, r1, q0, q1
715 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)
716 %1 = extractvalue { i32, i32 } %0, 1
717 %2 = zext i32 %1 to i64
719 %4 = extractvalue { i32, i32 } %0, 0
720 %5 = zext i32 %4 to i64
725 define arm_aapcs_vfpcc i64 @test_vmlaldavxq_s32(<4 x i32> %a, <4 x i32> %b) {
726 ; CHECK-LABEL: test_vmlaldavxq_s32:
727 ; CHECK: @ %bb.0: @ %entry
728 ; CHECK-NEXT: vmlaldavx.s32 r0, r1, q0, q1
731 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
732 %1 = extractvalue { i32, i32 } %0, 1
733 %2 = zext i32 %1 to i64
735 %4 = extractvalue { i32, i32 } %0, 0
736 %5 = zext i32 %4 to i64
741 define arm_aapcs_vfpcc i64 @test_vmlsldavq_s16(<8 x i16> %a, <8 x i16> %b) {
742 ; CHECK-LABEL: test_vmlsldavq_s16:
743 ; CHECK: @ %bb.0: @ %entry
744 ; CHECK-NEXT: vmlsldav.s16 r0, r1, q0, q1
747 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 1, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)
748 %1 = extractvalue { i32, i32 } %0, 1
749 %2 = zext i32 %1 to i64
751 %4 = extractvalue { i32, i32 } %0, 0
752 %5 = zext i32 %4 to i64
757 define arm_aapcs_vfpcc i64 @test_vmlsldavq_s32(<4 x i32> %a, <4 x i32> %b) {
758 ; CHECK-LABEL: test_vmlsldavq_s32:
759 ; CHECK: @ %bb.0: @ %entry
760 ; CHECK-NEXT: vmlsldav.s32 r0, r1, q0, q1
763 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
764 %1 = extractvalue { i32, i32 } %0, 1
765 %2 = zext i32 %1 to i64
767 %4 = extractvalue { i32, i32 } %0, 0
768 %5 = zext i32 %4 to i64
773 define arm_aapcs_vfpcc i64 @test_vmlsldavxvq_s16(<8 x i16> %a, <8 x i16> %b) {
774 ; CHECK-LABEL: test_vmlsldavxvq_s16:
775 ; CHECK: @ %bb.0: @ %entry
776 ; CHECK-NEXT: vmlsldavx.s16 r0, r1, q0, q1
779 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 1, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)
780 %1 = extractvalue { i32, i32 } %0, 1
781 %2 = zext i32 %1 to i64
783 %4 = extractvalue { i32, i32 } %0, 0
784 %5 = zext i32 %4 to i64
789 define arm_aapcs_vfpcc i64 @test_vmlsldavxq_s32(<4 x i32> %a, <4 x i32> %b) {
790 ; CHECK-LABEL: test_vmlsldavxq_s32:
791 ; CHECK: @ %bb.0: @ %entry
792 ; CHECK-NEXT: vmlsldavx.s32 r0, r1, q0, q1
795 %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 1, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
796 %1 = extractvalue { i32, i32 } %0, 1
797 %2 = zext i32 %1 to i64
799 %4 = extractvalue { i32, i32 } %0, 0
800 %5 = zext i32 %4 to i64
805 define arm_aapcs_vfpcc i64 @test_vrmlaldavhq_s32(<4 x i32> %a, <4 x i32> %b) {
806 ; CHECK-LABEL: test_vrmlaldavhq_s32:
807 ; CHECK: @ %bb.0: @ %entry
808 ; CHECK-NEXT: vrmlalvh.s32 r0, r1, q0, q1
811 %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
812 %1 = extractvalue { i32, i32 } %0, 1
813 %2 = zext i32 %1 to i64
815 %4 = extractvalue { i32, i32 } %0, 0
816 %5 = zext i32 %4 to i64
821 define arm_aapcs_vfpcc i64 @test_vrmlaldavhq_u32(<4 x i32> %a, <4 x i32> %b) {
822 ; CHECK-LABEL: test_vrmlaldavhq_u32:
823 ; CHECK: @ %bb.0: @ %entry
824 ; CHECK-NEXT: vrmlalvh.u32 r0, r1, q0, q1
827 %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
828 %1 = extractvalue { i32, i32 } %0, 1
829 %2 = zext i32 %1 to i64
831 %4 = extractvalue { i32, i32 } %0, 0
832 %5 = zext i32 %4 to i64
837 define arm_aapcs_vfpcc i64 @test_vrmlaldavhxq_s32(<4 x i32> %a, <4 x i32> %b) {
838 ; CHECK-LABEL: test_vrmlaldavhxq_s32:
839 ; CHECK: @ %bb.0: @ %entry
840 ; CHECK-NEXT: vrmlaldavhx.s32 r0, r1, q0, q1
843 %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
844 %1 = extractvalue { i32, i32 } %0, 1
845 %2 = zext i32 %1 to i64
847 %4 = extractvalue { i32, i32 } %0, 0
848 %5 = zext i32 %4 to i64
853 define arm_aapcs_vfpcc i64 @test_vrmlsldavhq_s32(<4 x i32> %a, <4 x i32> %b) {
854 ; CHECK-LABEL: test_vrmlsldavhq_s32:
855 ; CHECK: @ %bb.0: @ %entry
856 ; CHECK-NEXT: vrmlsldavh.s32 r0, r1, q0, q1
859 %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
860 %1 = extractvalue { i32, i32 } %0, 1
861 %2 = zext i32 %1 to i64
863 %4 = extractvalue { i32, i32 } %0, 0
864 %5 = zext i32 %4 to i64
869 define arm_aapcs_vfpcc i64 @test_vrmlsldavhxq_s32(<4 x i32> %a, <4 x i32> %b) {
870 ; CHECK-LABEL: test_vrmlsldavhxq_s32:
871 ; CHECK: @ %bb.0: @ %entry
872 ; CHECK-NEXT: vrmlsldavhx.s32 r0, r1, q0, q1
875 %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 1, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
876 %1 = extractvalue { i32, i32 } %0, 1
877 %2 = zext i32 %1 to i64
879 %4 = extractvalue { i32, i32 } %0, 0
880 %5 = zext i32 %4 to i64
885 define arm_aapcs_vfpcc i64 @test_vmlaldavq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
886 ; CHECK-LABEL: test_vmlaldavq_p_s16:
887 ; CHECK: @ %bb.0: @ %entry
888 ; CHECK-NEXT: vmsr p0, r0
890 ; CHECK-NEXT: vmlalvt.s16 r0, r1, q0, q1
893 %0 = zext i16 %p to i32
894 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
895 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
896 %3 = extractvalue { i32, i32 } %2, 1
897 %4 = zext i32 %3 to i64
899 %6 = extractvalue { i32, i32 } %2, 0
900 %7 = zext i32 %6 to i64
905 define arm_aapcs_vfpcc i64 @test_vmlaldavq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
906 ; CHECK-LABEL: test_vmlaldavq_p_s32:
907 ; CHECK: @ %bb.0: @ %entry
908 ; CHECK-NEXT: vmsr p0, r0
910 ; CHECK-NEXT: vmlalvt.s32 r0, r1, q0, q1
913 %0 = zext i16 %p to i32
914 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
915 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
916 %3 = extractvalue { i32, i32 } %2, 1
917 %4 = zext i32 %3 to i64
919 %6 = extractvalue { i32, i32 } %2, 0
920 %7 = zext i32 %6 to i64
925 define arm_aapcs_vfpcc i64 @test_vmlaldavq_p_u16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
926 ; CHECK-LABEL: test_vmlaldavq_p_u16:
927 ; CHECK: @ %bb.0: @ %entry
928 ; CHECK-NEXT: vmsr p0, r0
930 ; CHECK-NEXT: vmlalvt.u16 r0, r1, q0, q1
933 %0 = zext i16 %p to i32
934 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
935 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 1, i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
936 %3 = extractvalue { i32, i32 } %2, 1
937 %4 = zext i32 %3 to i64
939 %6 = extractvalue { i32, i32 } %2, 0
940 %7 = zext i32 %6 to i64
945 define arm_aapcs_vfpcc i64 @test_vmlaldavq_p_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
946 ; CHECK-LABEL: test_vmlaldavq_p_u32:
947 ; CHECK: @ %bb.0: @ %entry
948 ; CHECK-NEXT: vmsr p0, r0
950 ; CHECK-NEXT: vmlalvt.u32 r0, r1, q0, q1
953 %0 = zext i16 %p to i32
954 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
955 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
956 %3 = extractvalue { i32, i32 } %2, 1
957 %4 = zext i32 %3 to i64
959 %6 = extractvalue { i32, i32 } %2, 0
960 %7 = zext i32 %6 to i64
965 define arm_aapcs_vfpcc i64 @test_vmlaldavxq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
966 ; CHECK-LABEL: test_vmlaldavxq_p_s16:
967 ; CHECK: @ %bb.0: @ %entry
968 ; CHECK-NEXT: vmsr p0, r0
970 ; CHECK-NEXT: vmlaldavxt.s16 r0, r1, q0, q1
973 %0 = zext i16 %p to i32
974 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
975 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
976 %3 = extractvalue { i32, i32 } %2, 1
977 %4 = zext i32 %3 to i64
979 %6 = extractvalue { i32, i32 } %2, 0
980 %7 = zext i32 %6 to i64
985 define arm_aapcs_vfpcc i64 @test_vmlaldavxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
986 ; CHECK-LABEL: test_vmlaldavxq_p_s32:
987 ; CHECK: @ %bb.0: @ %entry
988 ; CHECK-NEXT: vmsr p0, r0
990 ; CHECK-NEXT: vmlaldavxt.s32 r0, r1, q0, q1
993 %0 = zext i16 %p to i32
994 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
995 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
996 %3 = extractvalue { i32, i32 } %2, 1
997 %4 = zext i32 %3 to i64
999 %6 = extractvalue { i32, i32 } %2, 0
1000 %7 = zext i32 %6 to i64
1005 define arm_aapcs_vfpcc i64 @test_vmlsldavq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
1006 ; CHECK-LABEL: test_vmlsldavq_p_s16:
1007 ; CHECK: @ %bb.0: @ %entry
1008 ; CHECK-NEXT: vmsr p0, r0
1010 ; CHECK-NEXT: vmlsldavt.s16 r0, r1, q0, q1
1013 %0 = zext i16 %p to i32
1014 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
1015 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
1016 %3 = extractvalue { i32, i32 } %2, 1
1017 %4 = zext i32 %3 to i64
1019 %6 = extractvalue { i32, i32 } %2, 0
1020 %7 = zext i32 %6 to i64
1025 define arm_aapcs_vfpcc i64 @test_vmlsldavq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1026 ; CHECK-LABEL: test_vmlsldavq_p_s32:
1027 ; CHECK: @ %bb.0: @ %entry
1028 ; CHECK-NEXT: vmsr p0, r0
1030 ; CHECK-NEXT: vmlsldavt.s32 r0, r1, q0, q1
1033 %0 = zext i16 %p to i32
1034 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1035 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
1036 %3 = extractvalue { i32, i32 } %2, 1
1037 %4 = zext i32 %3 to i64
1039 %6 = extractvalue { i32, i32 } %2, 0
1040 %7 = zext i32 %6 to i64
1045 define arm_aapcs_vfpcc i64 @test_vmlsldaxvq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
1046 ; CHECK-LABEL: test_vmlsldaxvq_p_s16:
1047 ; CHECK: @ %bb.0: @ %entry
1048 ; CHECK-NEXT: vmsr p0, r0
1050 ; CHECK-NEXT: vmlsldavxt.s16 r0, r1, q0, q1
1053 %0 = zext i16 %p to i32
1054 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
1055 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
1056 %3 = extractvalue { i32, i32 } %2, 1
1057 %4 = zext i32 %3 to i64
1059 %6 = extractvalue { i32, i32 } %2, 0
1060 %7 = zext i32 %6 to i64
1065 define arm_aapcs_vfpcc i64 @test_vmlsldavxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1066 ; CHECK-LABEL: test_vmlsldavxq_p_s32:
1067 ; CHECK: @ %bb.0: @ %entry
1068 ; CHECK-NEXT: vmsr p0, r0
1070 ; CHECK-NEXT: vmlsldavxt.s32 r0, r1, q0, q1
1073 %0 = zext i16 %p to i32
1074 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1075 %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
1076 %3 = extractvalue { i32, i32 } %2, 1
1077 %4 = zext i32 %3 to i64
1079 %6 = extractvalue { i32, i32 } %2, 0
1080 %7 = zext i32 %6 to i64
1085 define arm_aapcs_vfpcc i64 @test_vrmlaldavhq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1086 ; CHECK-LABEL: test_vrmlaldavhq_p_s32:
1087 ; CHECK: @ %bb.0: @ %entry
1088 ; CHECK-NEXT: vmsr p0, r0
1090 ; CHECK-NEXT: vrmlalvht.s32 r0, r1, q0, q1
1093 %0 = zext i16 %p to i32
1094 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1095 %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
1096 %3 = extractvalue { i32, i32 } %2, 1
1097 %4 = zext i32 %3 to i64
1099 %6 = extractvalue { i32, i32 } %2, 0
1100 %7 = zext i32 %6 to i64
1105 define arm_aapcs_vfpcc i64 @test_vrmlaldavhq_p_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1106 ; CHECK-LABEL: test_vrmlaldavhq_p_u32:
1107 ; CHECK: @ %bb.0: @ %entry
1108 ; CHECK-NEXT: vmsr p0, r0
1110 ; CHECK-NEXT: vrmlalvht.u32 r0, r1, q0, q1
1113 %0 = zext i16 %p to i32
1114 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1115 %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
1116 %3 = extractvalue { i32, i32 } %2, 1
1117 %4 = zext i32 %3 to i64
1119 %6 = extractvalue { i32, i32 } %2, 0
1120 %7 = zext i32 %6 to i64
1125 define arm_aapcs_vfpcc i64 @test_vrmlaldavhxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1126 ; CHECK-LABEL: test_vrmlaldavhxq_p_s32:
1127 ; CHECK: @ %bb.0: @ %entry
1128 ; CHECK-NEXT: vmsr p0, r0
1130 ; CHECK-NEXT: vrmlaldavhxt.s32 r0, r1, q0, q1
1133 %0 = zext i16 %p to i32
1134 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1135 %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
1136 %3 = extractvalue { i32, i32 } %2, 1
1137 %4 = zext i32 %3 to i64
1139 %6 = extractvalue { i32, i32 } %2, 0
1140 %7 = zext i32 %6 to i64
1145 define arm_aapcs_vfpcc i64 @test_vrmlsldavhq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1146 ; CHECK-LABEL: test_vrmlsldavhq_p_s32:
1147 ; CHECK: @ %bb.0: @ %entry
1148 ; CHECK-NEXT: vmsr p0, r0
1150 ; CHECK-NEXT: vrmlsldavht.s32 r0, r1, q0, q1
1153 %0 = zext i16 %p to i32
1154 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1155 %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
1156 %3 = extractvalue { i32, i32 } %2, 1
1157 %4 = zext i32 %3 to i64
1159 %6 = extractvalue { i32, i32 } %2, 0
1160 %7 = zext i32 %6 to i64
1165 define arm_aapcs_vfpcc i64 @test_vrmlsldavhxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
1166 ; CHECK-LABEL: test_vrmlsldavhxq_p_s32:
1167 ; CHECK: @ %bb.0: @ %entry
1168 ; CHECK-NEXT: vmsr p0, r0
1170 ; CHECK-NEXT: vrmlsldavhxt.s32 r0, r1, q0, q1
1173 %0 = zext i16 %p to i32
1174 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
1175 %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
1176 %3 = extractvalue { i32, i32 } %2, 1
1177 %4 = zext i32 %3 to i64
1179 %6 = extractvalue { i32, i32 } %2, 0
1180 %7 = zext i32 %6 to i64