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 <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32)
5 declare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)
6 declare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)
8 declare i32 @llvm.arm.mve.vmldava.v16i8(i32, i32, i32, i32, <16 x i8>, <16 x i8>)
9 declare i32 @llvm.arm.mve.vmldava.v8i16(i32, i32, i32, i32, <8 x i16>, <8 x i16>)
10 declare i32 @llvm.arm.mve.vmldava.v4i32(i32, i32, i32, i32, <4 x i32>, <4 x i32>)
12 declare i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32, i32, i32, i32, <16 x i8>, <16 x i8>, <16 x i1>)
13 declare i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32, i32, i32, i32, <8 x i16>, <8 x i16>, <8 x i1>)
14 declare i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32, i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i1>)
16 define arm_aapcs_vfpcc i32 @test_vmladavaq_s8(i32 %a, <16 x i8> %b, <16 x i8> %c) {
17 ; CHECK-LABEL: test_vmladavaq_s8:
18 ; CHECK: @ %bb.0: @ %entry
19 ; CHECK-NEXT: vmlava.s8 r0, q0, q1
22 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 0, i32 0, i32 %a, <16 x i8> %b, <16 x i8> %c)
26 define arm_aapcs_vfpcc i32 @test_vmladavaq_s16(i32 %a, <8 x i16> %b, <8 x i16> %c) {
27 ; CHECK-LABEL: test_vmladavaq_s16:
28 ; CHECK: @ %bb.0: @ %entry
29 ; CHECK-NEXT: vmlava.s16 r0, q0, q1
32 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 0, i32 0, i32 %a, <8 x i16> %b, <8 x i16> %c)
36 define arm_aapcs_vfpcc i32 @test_vmladavaq_s32(i32 %a, <4 x i32> %b, <4 x i32> %c) {
37 ; CHECK-LABEL: test_vmladavaq_s32:
38 ; CHECK: @ %bb.0: @ %entry
39 ; CHECK-NEXT: vmlava.s32 r0, q0, q1
42 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 0, i32 0, i32 %a, <4 x i32> %b, <4 x i32> %c)
46 define arm_aapcs_vfpcc i32 @test_vmladavaq_u8(i32 %a, <16 x i8> %b, <16 x i8> %c) {
47 ; CHECK-LABEL: test_vmladavaq_u8:
48 ; CHECK: @ %bb.0: @ %entry
49 ; CHECK-NEXT: vmlava.u8 r0, q0, q1
52 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 1, i32 0, i32 0, i32 %a, <16 x i8> %b, <16 x i8> %c)
56 define arm_aapcs_vfpcc i32 @test_vmladavaq_u16(i32 %a, <8 x i16> %b, <8 x i16> %c) {
57 ; CHECK-LABEL: test_vmladavaq_u16:
58 ; CHECK: @ %bb.0: @ %entry
59 ; CHECK-NEXT: vmlava.u16 r0, q0, q1
62 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 1, i32 0, i32 0, i32 %a, <8 x i16> %b, <8 x i16> %c)
66 define arm_aapcs_vfpcc i32 @test_vmladavaq_u32(i32 %a, <4 x i32> %b, <4 x i32> %c) {
67 ; CHECK-LABEL: test_vmladavaq_u32:
68 ; CHECK: @ %bb.0: @ %entry
69 ; CHECK-NEXT: vmlava.u32 r0, q0, q1
72 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 1, i32 0, i32 0, i32 %a, <4 x i32> %b, <4 x i32> %c)
76 define arm_aapcs_vfpcc i32 @test_vmladavaxq_s8(i32 %a, <16 x i8> %b, <16 x i8> %c) {
77 ; CHECK-LABEL: test_vmladavaxq_s8:
78 ; CHECK: @ %bb.0: @ %entry
79 ; CHECK-NEXT: vmladavax.s8 r0, q0, q1
82 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 0, i32 1, i32 %a, <16 x i8> %b, <16 x i8> %c)
86 define arm_aapcs_vfpcc i32 @test_vmladavaxq_s16(i32 %a, <8 x i16> %b, <8 x i16> %c) {
87 ; CHECK-LABEL: test_vmladavaxq_s16:
88 ; CHECK: @ %bb.0: @ %entry
89 ; CHECK-NEXT: vmladavax.s16 r0, q0, q1
92 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 0, i32 1, i32 %a, <8 x i16> %b, <8 x i16> %c)
96 define arm_aapcs_vfpcc i32 @test_vmladavaxq_s32(i32 %a, <4 x i32> %b, <4 x i32> %c) {
97 ; CHECK-LABEL: test_vmladavaxq_s32:
98 ; CHECK: @ %bb.0: @ %entry
99 ; CHECK-NEXT: vmladavax.s32 r0, q0, q1
102 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 0, i32 1, i32 %a, <4 x i32> %b, <4 x i32> %c)
106 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_s8(i32 %a, <16 x i8> %b, <16 x i8> %c) {
107 ; CHECK-LABEL: test_vmlsdavaq_s8:
108 ; CHECK: @ %bb.0: @ %entry
109 ; CHECK-NEXT: vmlsdava.s8 r0, q0, q1
112 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 1, i32 0, i32 %a, <16 x i8> %b, <16 x i8> %c)
116 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_s16(i32 %a, <8 x i16> %b, <8 x i16> %c) {
117 ; CHECK-LABEL: test_vmlsdavaq_s16:
118 ; CHECK: @ %bb.0: @ %entry
119 ; CHECK-NEXT: vmlsdava.s16 r0, q0, q1
122 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 1, i32 0, i32 %a, <8 x i16> %b, <8 x i16> %c)
126 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_s32(i32 %a, <4 x i32> %b, <4 x i32> %c) {
127 ; CHECK-LABEL: test_vmlsdavaq_s32:
128 ; CHECK: @ %bb.0: @ %entry
129 ; CHECK-NEXT: vmlsdava.s32 r0, q0, q1
132 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 1, i32 0, i32 %a, <4 x i32> %b, <4 x i32> %c)
136 define arm_aapcs_vfpcc i32 @test_vmlsdavaxq_s8(i32 %a, <16 x i8> %b, <16 x i8> %c) {
137 ; CHECK-LABEL: test_vmlsdavaxq_s8:
138 ; CHECK: @ %bb.0: @ %entry
139 ; CHECK-NEXT: vmlsdavax.s8 r0, q0, q1
142 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 1, i32 1, i32 %a, <16 x i8> %b, <16 x i8> %c)
146 define arm_aapcs_vfpcc i32 @test_vmlsdavaxq_s16(i32 %a, <8 x i16> %b, <8 x i16> %c) {
147 ; CHECK-LABEL: test_vmlsdavaxq_s16:
148 ; CHECK: @ %bb.0: @ %entry
149 ; CHECK-NEXT: vmlsdavax.s16 r0, q0, q1
152 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 1, i32 1, i32 %a, <8 x i16> %b, <8 x i16> %c)
156 define arm_aapcs_vfpcc i32 @test_vmlsdavaxq_s32(i32 %a, <4 x i32> %b, <4 x i32> %c) {
157 ; CHECK-LABEL: test_vmlsdavaxq_s32:
158 ; CHECK: @ %bb.0: @ %entry
159 ; CHECK-NEXT: vmlsdavax.s32 r0, q0, q1
162 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 1, i32 1, i32 %a, <4 x i32> %b, <4 x i32> %c)
166 define arm_aapcs_vfpcc i32 @test_vmladavaq_p_s8(i32 %a, <16 x i8> %b, <16 x i8> %c, i16 zeroext %p) {
167 ; CHECK-LABEL: test_vmladavaq_p_s8:
168 ; CHECK: @ %bb.0: @ %entry
169 ; CHECK-NEXT: vmsr p0, r1
171 ; CHECK-NEXT: vmlavat.s8 r0, q0, q1
174 %0 = zext i16 %p to i32
175 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
176 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 0, i32 0, i32 0, i32 %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %1)
180 define arm_aapcs_vfpcc i32 @test_vmladavaq_p_s16(i32 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
181 ; CHECK-LABEL: test_vmladavaq_p_s16:
182 ; CHECK: @ %bb.0: @ %entry
183 ; CHECK-NEXT: vmsr p0, r1
185 ; CHECK-NEXT: vmlavat.s16 r0, q0, q1
188 %0 = zext i16 %p to i32
189 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
190 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 0, i32 %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %1)
194 define arm_aapcs_vfpcc i32 @test_vmladavaq_p_s32(i32 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
195 ; CHECK-LABEL: test_vmladavaq_p_s32:
196 ; CHECK: @ %bb.0: @ %entry
197 ; CHECK-NEXT: vmsr p0, r1
199 ; CHECK-NEXT: vmlavat.s32 r0, q0, q1
202 %0 = zext i16 %p to i32
203 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
204 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %1)
208 define arm_aapcs_vfpcc i32 @test_vmladavaq_p_u8(i32 %a, <16 x i8> %b, <16 x i8> %c, i16 zeroext %p) {
209 ; CHECK-LABEL: test_vmladavaq_p_u8:
210 ; CHECK: @ %bb.0: @ %entry
211 ; CHECK-NEXT: vmsr p0, r1
213 ; CHECK-NEXT: vmlavat.u8 r0, q0, q1
216 %0 = zext i16 %p to i32
217 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
218 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 1, i32 0, i32 0, i32 %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %1)
222 define arm_aapcs_vfpcc i32 @test_vmladavaq_p_u16(i32 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
223 ; CHECK-LABEL: test_vmladavaq_p_u16:
224 ; CHECK: @ %bb.0: @ %entry
225 ; CHECK-NEXT: vmsr p0, r1
227 ; CHECK-NEXT: vmlavat.u16 r0, q0, q1
230 %0 = zext i16 %p to i32
231 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
232 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 1, i32 0, i32 0, i32 %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %1)
236 define arm_aapcs_vfpcc i32 @test_vmladavaq_p_u32(i32 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
237 ; CHECK-LABEL: test_vmladavaq_p_u32:
238 ; CHECK: @ %bb.0: @ %entry
239 ; CHECK-NEXT: vmsr p0, r1
241 ; CHECK-NEXT: vmlavat.u32 r0, q0, q1
244 %0 = zext i16 %p to i32
245 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
246 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %1)
250 define arm_aapcs_vfpcc i32 @test_vmladavaxq_p_s8(i32 %a, <16 x i8> %b, <16 x i8> %c, i16 zeroext %p) {
251 ; CHECK-LABEL: test_vmladavaxq_p_s8:
252 ; CHECK: @ %bb.0: @ %entry
253 ; CHECK-NEXT: vmsr p0, r1
255 ; CHECK-NEXT: vmladavaxt.s8 r0, q0, q1
258 %0 = zext i16 %p to i32
259 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
260 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 0, i32 0, i32 1, i32 %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %1)
264 define arm_aapcs_vfpcc i32 @test_vmladavaxq_p_s16(i32 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
265 ; CHECK-LABEL: test_vmladavaxq_p_s16:
266 ; CHECK: @ %bb.0: @ %entry
267 ; CHECK-NEXT: vmsr p0, r1
269 ; CHECK-NEXT: vmladavaxt.s16 r0, q0, q1
272 %0 = zext i16 %p to i32
273 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
274 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 1, i32 %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %1)
278 define arm_aapcs_vfpcc i32 @test_vmladavaxq_p_s32(i32 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
279 ; CHECK-LABEL: test_vmladavaxq_p_s32:
280 ; CHECK: @ %bb.0: @ %entry
281 ; CHECK-NEXT: vmsr p0, r1
283 ; CHECK-NEXT: vmladavaxt.s32 r0, q0, q1
286 %0 = zext i16 %p to i32
287 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
288 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %1)
292 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_p_s8(i32 %a, <16 x i8> %b, <16 x i8> %c, i16 zeroext %p) {
293 ; CHECK-LABEL: test_vmlsdavaq_p_s8:
294 ; CHECK: @ %bb.0: @ %entry
295 ; CHECK-NEXT: vmsr p0, r1
297 ; CHECK-NEXT: vmlsdavat.s8 r0, q0, q1
300 %0 = zext i16 %p to i32
301 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
302 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 0, i32 1, i32 0, i32 %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %1)
306 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_p_s16(i32 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
307 ; CHECK-LABEL: test_vmlsdavaq_p_s16:
308 ; CHECK: @ %bb.0: @ %entry
309 ; CHECK-NEXT: vmsr p0, r1
311 ; CHECK-NEXT: vmlsdavat.s16 r0, q0, q1
314 %0 = zext i16 %p to i32
315 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
316 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 0, i32 %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %1)
320 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_p_s32(i32 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
321 ; CHECK-LABEL: test_vmlsdavaq_p_s32:
322 ; CHECK: @ %bb.0: @ %entry
323 ; CHECK-NEXT: vmsr p0, r1
325 ; CHECK-NEXT: vmlsdavat.s32 r0, q0, q1
328 %0 = zext i16 %p to i32
329 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
330 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %1)
334 define arm_aapcs_vfpcc i32 @test_vmlsdavaxq_p_s8(i32 %a, <16 x i8> %b, <16 x i8> %c, i16 zeroext %p) {
335 ; CHECK-LABEL: test_vmlsdavaxq_p_s8:
336 ; CHECK: @ %bb.0: @ %entry
337 ; CHECK-NEXT: vmsr p0, r1
339 ; CHECK-NEXT: vmlsdavaxt.s8 r0, q0, q1
342 %0 = zext i16 %p to i32
343 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
344 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 0, i32 1, i32 1, i32 %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %1)
348 define arm_aapcs_vfpcc i32 @test_vmlsdavaxq_p_s16(i32 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {
349 ; CHECK-LABEL: test_vmlsdavaxq_p_s16:
350 ; CHECK: @ %bb.0: @ %entry
351 ; CHECK-NEXT: vmsr p0, r1
353 ; CHECK-NEXT: vmlsdavaxt.s16 r0, q0, q1
356 %0 = zext i16 %p to i32
357 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
358 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 1, i32 %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %1)
362 define arm_aapcs_vfpcc i32 @test_vmlsdavaxq_p_s32(i32 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {
363 ; CHECK-LABEL: test_vmlsdavaxq_p_s32:
364 ; CHECK: @ %bb.0: @ %entry
365 ; CHECK-NEXT: vmsr p0, r1
367 ; CHECK-NEXT: vmlsdavaxt.s32 r0, q0, q1
370 %0 = zext i16 %p to i32
371 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
372 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %1)
376 define arm_aapcs_vfpcc i32 @test_vmladavq_s8(<16 x i8> %a, <16 x i8> %b) {
377 ; CHECK-LABEL: test_vmladavq_s8:
378 ; CHECK: @ %bb.0: @ %entry
379 ; CHECK-NEXT: vmlav.s8 r0, q0, q1
382 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 0, i32 0, i32 0, <16 x i8> %a, <16 x i8> %b)
386 define arm_aapcs_vfpcc i32 @test_vmladavq_s16(<8 x i16> %a, <8 x i16> %b) {
387 ; CHECK-LABEL: test_vmladavq_s16:
388 ; CHECK: @ %bb.0: @ %entry
389 ; CHECK-NEXT: vmlav.s16 r0, q0, q1
392 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)
396 define arm_aapcs_vfpcc i32 @test_vmladavq_s32(<4 x i32> %a, <4 x i32> %b) {
397 ; CHECK-LABEL: test_vmladavq_s32:
398 ; CHECK: @ %bb.0: @ %entry
399 ; CHECK-NEXT: vmlav.s32 r0, q0, q1
402 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
406 define arm_aapcs_vfpcc i32 @test_vmladavq_u8(<16 x i8> %a, <16 x i8> %b) {
407 ; CHECK-LABEL: test_vmladavq_u8:
408 ; CHECK: @ %bb.0: @ %entry
409 ; CHECK-NEXT: vmlav.u8 r0, q0, q1
412 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 1, i32 0, i32 0, i32 0, <16 x i8> %a, <16 x i8> %b)
416 define arm_aapcs_vfpcc i32 @test_vmladavq_u16(<8 x i16> %a, <8 x i16> %b) {
417 ; CHECK-LABEL: test_vmladavq_u16:
418 ; CHECK: @ %bb.0: @ %entry
419 ; CHECK-NEXT: vmlav.u16 r0, q0, q1
422 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 1, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)
426 define arm_aapcs_vfpcc i32 @test_vmladavq_u32(<4 x i32> %a, <4 x i32> %b) {
427 ; CHECK-LABEL: test_vmladavq_u32:
428 ; CHECK: @ %bb.0: @ %entry
429 ; CHECK-NEXT: vmlav.u32 r0, q0, q1
432 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
436 define arm_aapcs_vfpcc i32 @test_vmladavxq_s8(<16 x i8> %a, <16 x i8> %b) {
437 ; CHECK-LABEL: test_vmladavxq_s8:
438 ; CHECK: @ %bb.0: @ %entry
439 ; CHECK-NEXT: vmladavx.s8 r0, q0, q1
442 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 0, i32 1, i32 0, <16 x i8> %a, <16 x i8> %b)
446 define arm_aapcs_vfpcc i32 @test_vmladavxq_s16(<8 x i16> %a, <8 x i16> %b) {
447 ; CHECK-LABEL: test_vmladavxq_s16:
448 ; CHECK: @ %bb.0: @ %entry
449 ; CHECK-NEXT: vmladavx.s16 r0, q0, q1
452 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 0, i32 1, i32 0, <8 x i16> %a, <8 x i16> %b)
456 define arm_aapcs_vfpcc i32 @test_vmladavxq_s32(<4 x i32> %a, <4 x i32> %b) {
457 ; CHECK-LABEL: test_vmladavxq_s32:
458 ; CHECK: @ %bb.0: @ %entry
459 ; CHECK-NEXT: vmladavx.s32 r0, q0, q1
462 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 0, i32 1, i32 0, <4 x i32> %a, <4 x i32> %b)
466 define arm_aapcs_vfpcc i32 @test_vmlsdavq_s8(<16 x i8> %a, <16 x i8> %b) {
467 ; CHECK-LABEL: test_vmlsdavq_s8:
468 ; CHECK: @ %bb.0: @ %entry
469 ; CHECK-NEXT: vmlsdav.s8 r0, q0, q1
472 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 1, i32 0, i32 0, <16 x i8> %a, <16 x i8> %b)
476 define arm_aapcs_vfpcc i32 @test_vmlsdavq_s16(<8 x i16> %a, <8 x i16> %b) {
477 ; CHECK-LABEL: test_vmlsdavq_s16:
478 ; CHECK: @ %bb.0: @ %entry
479 ; CHECK-NEXT: vmlsdav.s16 r0, q0, q1
482 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)
486 define arm_aapcs_vfpcc i32 @test_vmlsdavq_s32(<4 x i32> %a, <4 x i32> %b) {
487 ; CHECK-LABEL: test_vmlsdavq_s32:
488 ; CHECK: @ %bb.0: @ %entry
489 ; CHECK-NEXT: vmlsdav.s32 r0, q0, q1
492 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)
496 define arm_aapcs_vfpcc i32 @test_vmlsdavxq_s8(<16 x i8> %a, <16 x i8> %b) {
497 ; CHECK-LABEL: test_vmlsdavxq_s8:
498 ; CHECK: @ %bb.0: @ %entry
499 ; CHECK-NEXT: vmlsdavx.s8 r0, q0, q1
502 %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 1, i32 1, i32 0, <16 x i8> %a, <16 x i8> %b)
506 define arm_aapcs_vfpcc i32 @test_vmlsdavxq_s16(<8 x i16> %a, <8 x i16> %b) {
507 ; CHECK-LABEL: test_vmlsdavxq_s16:
508 ; CHECK: @ %bb.0: @ %entry
509 ; CHECK-NEXT: vmlsdavx.s16 r0, q0, q1
512 %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 1, i32 1, i32 0, <8 x i16> %a, <8 x i16> %b)
516 define arm_aapcs_vfpcc i32 @test_vmlsdavxq_s32(<4 x i32> %a, <4 x i32> %b) {
517 ; CHECK-LABEL: test_vmlsdavxq_s32:
518 ; CHECK: @ %bb.0: @ %entry
519 ; CHECK-NEXT: vmlsdavx.s32 r0, q0, q1
522 %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 1, i32 1, i32 0, <4 x i32> %a, <4 x i32> %b)
526 define arm_aapcs_vfpcc i32 @test_vmladavq_p_s8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
527 ; CHECK-LABEL: test_vmladavq_p_s8:
528 ; CHECK: @ %bb.0: @ %entry
529 ; CHECK-NEXT: vmsr p0, r0
531 ; CHECK-NEXT: vmlavt.s8 r0, q0, q1
534 %0 = zext i16 %p to i32
535 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
536 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 0, i32 0, i32 0, i32 0, <16 x i8> %a, <16 x i8> %b, <16 x i1> %1)
540 define arm_aapcs_vfpcc i32 @test_vmladavq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
541 ; CHECK-LABEL: test_vmladavq_p_s16:
542 ; CHECK: @ %bb.0: @ %entry
543 ; CHECK-NEXT: vmsr p0, r0
545 ; CHECK-NEXT: vmlavt.s16 r0, q0, q1
548 %0 = zext i16 %p to i32
549 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
550 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
554 define arm_aapcs_vfpcc i32 @test_vmladavq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
555 ; CHECK-LABEL: test_vmladavq_p_s32:
556 ; CHECK: @ %bb.0: @ %entry
557 ; CHECK-NEXT: vmsr p0, r0
559 ; CHECK-NEXT: vmlavt.s32 r0, q0, q1
562 %0 = zext i16 %p to i32
563 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
564 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
568 define arm_aapcs_vfpcc i32 @test_vmladavq_p_u8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
569 ; CHECK-LABEL: test_vmladavq_p_u8:
570 ; CHECK: @ %bb.0: @ %entry
571 ; CHECK-NEXT: vmsr p0, r0
573 ; CHECK-NEXT: vmlavt.u8 r0, q0, q1
576 %0 = zext i16 %p to i32
577 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
578 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 1, i32 0, i32 0, i32 0, <16 x i8> %a, <16 x i8> %b, <16 x i1> %1)
582 define arm_aapcs_vfpcc i32 @test_vmladavq_p_u16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
583 ; CHECK-LABEL: test_vmladavq_p_u16:
584 ; CHECK: @ %bb.0: @ %entry
585 ; CHECK-NEXT: vmsr p0, r0
587 ; CHECK-NEXT: vmlavt.u16 r0, q0, q1
590 %0 = zext i16 %p to i32
591 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
592 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 1, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
596 define arm_aapcs_vfpcc i32 @test_vmladavq_p_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
597 ; CHECK-LABEL: test_vmladavq_p_u32:
598 ; CHECK: @ %bb.0: @ %entry
599 ; CHECK-NEXT: vmsr p0, r0
601 ; CHECK-NEXT: vmlavt.u32 r0, q0, q1
604 %0 = zext i16 %p to i32
605 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
606 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
610 define arm_aapcs_vfpcc i32 @test_vmladavxq_p_s8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
611 ; CHECK-LABEL: test_vmladavxq_p_s8:
612 ; CHECK: @ %bb.0: @ %entry
613 ; CHECK-NEXT: vmsr p0, r0
615 ; CHECK-NEXT: vmladavxt.s8 r0, q0, q1
618 %0 = zext i16 %p to i32
619 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
620 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 0, i32 0, i32 1, i32 0, <16 x i8> %a, <16 x i8> %b, <16 x i1> %1)
624 define arm_aapcs_vfpcc i32 @test_vmladavxq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
625 ; CHECK-LABEL: test_vmladavxq_p_s16:
626 ; CHECK: @ %bb.0: @ %entry
627 ; CHECK-NEXT: vmsr p0, r0
629 ; CHECK-NEXT: vmladavxt.s16 r0, q0, q1
632 %0 = zext i16 %p to i32
633 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
634 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 1, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
638 define arm_aapcs_vfpcc i32 @test_vmladavxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
639 ; CHECK-LABEL: test_vmladavxq_p_s32:
640 ; CHECK: @ %bb.0: @ %entry
641 ; CHECK-NEXT: vmsr p0, r0
643 ; CHECK-NEXT: vmladavxt.s32 r0, q0, q1
646 %0 = zext i16 %p to i32
647 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
648 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
652 define arm_aapcs_vfpcc i32 @test_vmlsdavq_p_s8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
653 ; CHECK-LABEL: test_vmlsdavq_p_s8:
654 ; CHECK: @ %bb.0: @ %entry
655 ; CHECK-NEXT: vmsr p0, r0
657 ; CHECK-NEXT: vmlsdavt.s8 r0, q0, q1
660 %0 = zext i16 %p to i32
661 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
662 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 0, i32 1, i32 0, i32 0, <16 x i8> %a, <16 x i8> %b, <16 x i1> %1)
666 define arm_aapcs_vfpcc i32 @test_vmlsdavq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
667 ; CHECK-LABEL: test_vmlsdavq_p_s16:
668 ; CHECK: @ %bb.0: @ %entry
669 ; CHECK-NEXT: vmsr p0, r0
671 ; CHECK-NEXT: vmlsdavt.s16 r0, q0, q1
674 %0 = zext i16 %p to i32
675 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
676 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
680 define arm_aapcs_vfpcc i32 @test_vmlsdavq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
681 ; CHECK-LABEL: test_vmlsdavq_p_s32:
682 ; CHECK: @ %bb.0: @ %entry
683 ; CHECK-NEXT: vmsr p0, r0
685 ; CHECK-NEXT: vmlsdavt.s32 r0, q0, q1
688 %0 = zext i16 %p to i32
689 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
690 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)
694 define arm_aapcs_vfpcc i32 @test_vmlsdavxq_p_s8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
695 ; CHECK-LABEL: test_vmlsdavxq_p_s8:
696 ; CHECK: @ %bb.0: @ %entry
697 ; CHECK-NEXT: vmsr p0, r0
699 ; CHECK-NEXT: vmlsdavxt.s8 r0, q0, q1
702 %0 = zext i16 %p to i32
703 %1 = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
704 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v16i8.v16i1(i32 0, i32 1, i32 1, i32 0, <16 x i8> %a, <16 x i8> %b, <16 x i1> %1)
708 define arm_aapcs_vfpcc i32 @test_vmlsdavxq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
709 ; CHECK-LABEL: test_vmlsdavxq_p_s16:
710 ; CHECK: @ %bb.0: @ %entry
711 ; CHECK-NEXT: vmsr p0, r0
713 ; CHECK-NEXT: vmlsdavxt.s16 r0, q0, q1
716 %0 = zext i16 %p to i32
717 %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
718 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 1, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)
722 define arm_aapcs_vfpcc i32 @test_vmlsdavxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
723 ; CHECK-LABEL: test_vmlsdavxq_p_s32:
724 ; CHECK: @ %bb.0: @ %entry
725 ; CHECK-NEXT: vmsr p0, r0
727 ; CHECK-NEXT: vmlsdavxt.s32 r0, q0, q1
730 %0 = zext i16 %p to i32
731 %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
732 %2 = call i32 @llvm.arm.mve.vmldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)