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 define arm_aapcs_vfpcc <16 x i8> @test_vqdmladhq_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b) {
5 ; CHECK-LABEL: test_vqdmladhq_s8:
6 ; CHECK: @ %bb.0: @ %entry
7 ; CHECK-NEXT: vqdmladh.s8 q0, q1, q2
10 %0 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 0, i32 0, i32 0)
14 define arm_aapcs_vfpcc <8 x i16> @test_vqdmladhq_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b) {
15 ; CHECK-LABEL: test_vqdmladhq_s16:
16 ; CHECK: @ %bb.0: @ %entry
17 ; CHECK-NEXT: vqdmladh.s16 q0, q1, q2
20 %0 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 0, i32 0, i32 0)
24 define arm_aapcs_vfpcc <4 x i32> @test_vqdmladhq_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b) {
25 ; CHECK-LABEL: test_vqdmladhq_s32:
26 ; CHECK: @ %bb.0: @ %entry
27 ; CHECK-NEXT: vqdmladh.s32 q0, q1, q2
30 %0 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 0, i32 0, i32 0)
34 define arm_aapcs_vfpcc <16 x i8> @test_vqdmladhxq_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b) {
35 ; CHECK-LABEL: test_vqdmladhxq_s8:
36 ; CHECK: @ %bb.0: @ %entry
37 ; CHECK-NEXT: vqdmladhx.s8 q0, q1, q2
40 %0 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 1, i32 0, i32 0)
44 define arm_aapcs_vfpcc <8 x i16> @test_vqdmladhxq_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b) {
45 ; CHECK-LABEL: test_vqdmladhxq_s16:
46 ; CHECK: @ %bb.0: @ %entry
47 ; CHECK-NEXT: vqdmladhx.s16 q0, q1, q2
50 %0 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 1, i32 0, i32 0)
54 define arm_aapcs_vfpcc <4 x i32> @test_vqdmladhxq_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b) {
55 ; CHECK-LABEL: test_vqdmladhxq_s32:
56 ; CHECK: @ %bb.0: @ %entry
57 ; CHECK-NEXT: vqdmladhx.s32 q0, q1, q2
60 %0 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 1, i32 0, i32 0)
64 define arm_aapcs_vfpcc <16 x i8> @test_vqdmlsdhq_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b) {
65 ; CHECK-LABEL: test_vqdmlsdhq_s8:
66 ; CHECK: @ %bb.0: @ %entry
67 ; CHECK-NEXT: vqdmlsdh.s8 q0, q1, q2
70 %0 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 0, i32 0, i32 1)
74 define arm_aapcs_vfpcc <8 x i16> @test_vqdmlsdhq_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b) {
75 ; CHECK-LABEL: test_vqdmlsdhq_s16:
76 ; CHECK: @ %bb.0: @ %entry
77 ; CHECK-NEXT: vqdmlsdh.s16 q0, q1, q2
80 %0 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 0, i32 0, i32 1)
84 define arm_aapcs_vfpcc <4 x i32> @test_vqdmlsdhq_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b) {
85 ; CHECK-LABEL: test_vqdmlsdhq_s32:
86 ; CHECK: @ %bb.0: @ %entry
87 ; CHECK-NEXT: vqdmlsdh.s32 q0, q1, q2
90 %0 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 0, i32 0, i32 1)
94 define arm_aapcs_vfpcc <16 x i8> @test_vqdmlsdhxq_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b) {
95 ; CHECK-LABEL: test_vqdmlsdhxq_s8:
96 ; CHECK: @ %bb.0: @ %entry
97 ; CHECK-NEXT: vqdmlsdhx.s8 q0, q1, q2
100 %0 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 1, i32 0, i32 1)
104 define arm_aapcs_vfpcc <8 x i16> @test_vqdmlsdhxq_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b) {
105 ; CHECK-LABEL: test_vqdmlsdhxq_s16:
106 ; CHECK: @ %bb.0: @ %entry
107 ; CHECK-NEXT: vqdmlsdhx.s16 q0, q1, q2
110 %0 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 1, i32 0, i32 1)
114 define arm_aapcs_vfpcc <4 x i32> @test_vqdmlsdhxq_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b) {
115 ; CHECK-LABEL: test_vqdmlsdhxq_s32:
116 ; CHECK: @ %bb.0: @ %entry
117 ; CHECK-NEXT: vqdmlsdhx.s32 q0, q1, q2
120 %0 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 1, i32 0, i32 1)
124 define arm_aapcs_vfpcc <16 x i8> @test_vqrdmladhq_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b) {
125 ; CHECK-LABEL: test_vqrdmladhq_s8:
126 ; CHECK: @ %bb.0: @ %entry
127 ; CHECK-NEXT: vqrdmladh.s8 q0, q1, q2
130 %0 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 0, i32 1, i32 0)
134 define arm_aapcs_vfpcc <8 x i16> @test_vqrdmladhq_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b) {
135 ; CHECK-LABEL: test_vqrdmladhq_s16:
136 ; CHECK: @ %bb.0: @ %entry
137 ; CHECK-NEXT: vqrdmladh.s16 q0, q1, q2
140 %0 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 0, i32 1, i32 0)
144 define arm_aapcs_vfpcc <4 x i32> @test_vqrdmladhq_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b) {
145 ; CHECK-LABEL: test_vqrdmladhq_s32:
146 ; CHECK: @ %bb.0: @ %entry
147 ; CHECK-NEXT: vqrdmladh.s32 q0, q1, q2
150 %0 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 0, i32 1, i32 0)
154 define arm_aapcs_vfpcc <16 x i8> @test_vqrdmladhxq_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b) {
155 ; CHECK-LABEL: test_vqrdmladhxq_s8:
156 ; CHECK: @ %bb.0: @ %entry
157 ; CHECK-NEXT: vqrdmladhx.s8 q0, q1, q2
160 %0 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 1, i32 1, i32 0)
164 define arm_aapcs_vfpcc <8 x i16> @test_vqrdmladhxq_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b) {
165 ; CHECK-LABEL: test_vqrdmladhxq_s16:
166 ; CHECK: @ %bb.0: @ %entry
167 ; CHECK-NEXT: vqrdmladhx.s16 q0, q1, q2
170 %0 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 1, i32 1, i32 0)
174 define arm_aapcs_vfpcc <4 x i32> @test_vqrdmladhxq_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b) {
175 ; CHECK-LABEL: test_vqrdmladhxq_s32:
176 ; CHECK: @ %bb.0: @ %entry
177 ; CHECK-NEXT: vqrdmladhx.s32 q0, q1, q2
180 %0 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 1, i32 1, i32 0)
184 define arm_aapcs_vfpcc <16 x i8> @test_vqrdmlsdhq_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b) {
185 ; CHECK-LABEL: test_vqrdmlsdhq_s8:
186 ; CHECK: @ %bb.0: @ %entry
187 ; CHECK-NEXT: vqrdmlsdh.s8 q0, q1, q2
190 %0 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 0, i32 1, i32 1)
194 define arm_aapcs_vfpcc <8 x i16> @test_vqrdmlsdhq_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b) {
195 ; CHECK-LABEL: test_vqrdmlsdhq_s16:
196 ; CHECK: @ %bb.0: @ %entry
197 ; CHECK-NEXT: vqrdmlsdh.s16 q0, q1, q2
200 %0 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 0, i32 1, i32 1)
204 define arm_aapcs_vfpcc <4 x i32> @test_vqrdmlsdhq_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b) {
205 ; CHECK-LABEL: test_vqrdmlsdhq_s32:
206 ; CHECK: @ %bb.0: @ %entry
207 ; CHECK-NEXT: vqrdmlsdh.s32 q0, q1, q2
210 %0 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 0, i32 1, i32 1)
214 define arm_aapcs_vfpcc <16 x i8> @test_vqrdmlsdhxq_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b) {
215 ; CHECK-LABEL: test_vqrdmlsdhxq_s8:
216 ; CHECK: @ %bb.0: @ %entry
217 ; CHECK-NEXT: vqrdmlsdhx.s8 q0, q1, q2
220 %0 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 1, i32 1, i32 1)
224 define arm_aapcs_vfpcc <8 x i16> @test_vqrdmlsdhxq_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b) {
225 ; CHECK-LABEL: test_vqrdmlsdhxq_s16:
226 ; CHECK: @ %bb.0: @ %entry
227 ; CHECK-NEXT: vqrdmlsdhx.s16 q0, q1, q2
230 %0 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 1, i32 1, i32 1)
234 define arm_aapcs_vfpcc <4 x i32> @test_vqrdmlsdhxq_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b) {
235 ; CHECK-LABEL: test_vqrdmlsdhxq_s32:
236 ; CHECK: @ %bb.0: @ %entry
237 ; CHECK-NEXT: vqrdmlsdhx.s32 q0, q1, q2
240 %0 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 1, i32 1, i32 1)
244 define arm_aapcs_vfpcc <16 x i8> @test_vqdmladhq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
245 ; CHECK-LABEL: test_vqdmladhq_m_s8:
246 ; CHECK: @ %bb.0: @ %entry
247 ; CHECK-NEXT: vmsr p0, r0
249 ; CHECK-NEXT: vqdmladht.s8 q0, q1, q2
252 %0 = zext i16 %p to i32
253 %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
254 %2 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 0, i32 0, i32 0, <16 x i1> %1)
258 define arm_aapcs_vfpcc <8 x i16> @test_vqdmladhq_m_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
259 ; CHECK-LABEL: test_vqdmladhq_m_s16:
260 ; CHECK: @ %bb.0: @ %entry
261 ; CHECK-NEXT: vmsr p0, r0
263 ; CHECK-NEXT: vqdmladht.s16 q0, q1, q2
266 %0 = zext i16 %p to i32
267 %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
268 %2 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 0, i32 0, i32 0, <8 x i1> %1)
272 define arm_aapcs_vfpcc <4 x i32> @test_vqdmladhq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
273 ; CHECK-LABEL: test_vqdmladhq_m_s32:
274 ; CHECK: @ %bb.0: @ %entry
275 ; CHECK-NEXT: vmsr p0, r0
277 ; CHECK-NEXT: vqdmladht.s32 q0, q1, q2
280 %0 = zext i16 %p to i32
281 %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
282 %2 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 0, i32 0, i32 0, <4 x i1> %1)
286 define arm_aapcs_vfpcc <16 x i8> @test_vqdmladhxq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
287 ; CHECK-LABEL: test_vqdmladhxq_m_s8:
288 ; CHECK: @ %bb.0: @ %entry
289 ; CHECK-NEXT: vmsr p0, r0
291 ; CHECK-NEXT: vqdmladhxt.s8 q0, q1, q2
294 %0 = zext i16 %p to i32
295 %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
296 %2 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 1, i32 0, i32 0, <16 x i1> %1)
300 define arm_aapcs_vfpcc <8 x i16> @test_vqdmladhxq_m_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
301 ; CHECK-LABEL: test_vqdmladhxq_m_s16:
302 ; CHECK: @ %bb.0: @ %entry
303 ; CHECK-NEXT: vmsr p0, r0
305 ; CHECK-NEXT: vqdmladhxt.s16 q0, q1, q2
308 %0 = zext i16 %p to i32
309 %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
310 %2 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 1, i32 0, i32 0, <8 x i1> %1)
314 define arm_aapcs_vfpcc <4 x i32> @test_vqdmladhxq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
315 ; CHECK-LABEL: test_vqdmladhxq_m_s32:
316 ; CHECK: @ %bb.0: @ %entry
317 ; CHECK-NEXT: vmsr p0, r0
319 ; CHECK-NEXT: vqdmladhxt.s32 q0, q1, q2
322 %0 = zext i16 %p to i32
323 %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
324 %2 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 1, i32 0, i32 0, <4 x i1> %1)
328 define arm_aapcs_vfpcc <16 x i8> @test_vqdmlsdhq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
329 ; CHECK-LABEL: test_vqdmlsdhq_m_s8:
330 ; CHECK: @ %bb.0: @ %entry
331 ; CHECK-NEXT: vmsr p0, r0
333 ; CHECK-NEXT: vqdmlsdht.s8 q0, q1, q2
336 %0 = zext i16 %p to i32
337 %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
338 %2 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 0, i32 0, i32 1, <16 x i1> %1)
342 define arm_aapcs_vfpcc <8 x i16> @test_vqdmlsdhq_m_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
343 ; CHECK-LABEL: test_vqdmlsdhq_m_s16:
344 ; CHECK: @ %bb.0: @ %entry
345 ; CHECK-NEXT: vmsr p0, r0
347 ; CHECK-NEXT: vqdmlsdht.s16 q0, q1, q2
350 %0 = zext i16 %p to i32
351 %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
352 %2 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 0, i32 0, i32 1, <8 x i1> %1)
356 define arm_aapcs_vfpcc <4 x i32> @test_vqdmlsdhq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
357 ; CHECK-LABEL: test_vqdmlsdhq_m_s32:
358 ; CHECK: @ %bb.0: @ %entry
359 ; CHECK-NEXT: vmsr p0, r0
361 ; CHECK-NEXT: vqdmlsdht.s32 q0, q1, q2
364 %0 = zext i16 %p to i32
365 %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
366 %2 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 0, i32 0, i32 1, <4 x i1> %1)
370 define arm_aapcs_vfpcc <16 x i8> @test_vqdmlsdhxq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
371 ; CHECK-LABEL: test_vqdmlsdhxq_m_s8:
372 ; CHECK: @ %bb.0: @ %entry
373 ; CHECK-NEXT: vmsr p0, r0
375 ; CHECK-NEXT: vqdmlsdhxt.s8 q0, q1, q2
378 %0 = zext i16 %p to i32
379 %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
380 %2 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 1, i32 0, i32 1, <16 x i1> %1)
384 define arm_aapcs_vfpcc <8 x i16> @test_vqdmlsdhxq_m_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
385 ; CHECK-LABEL: test_vqdmlsdhxq_m_s16:
386 ; CHECK: @ %bb.0: @ %entry
387 ; CHECK-NEXT: vmsr p0, r0
389 ; CHECK-NEXT: vqdmlsdhxt.s16 q0, q1, q2
392 %0 = zext i16 %p to i32
393 %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
394 %2 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 1, i32 0, i32 1, <8 x i1> %1)
398 define arm_aapcs_vfpcc <4 x i32> @test_vqdmlsdhxq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
399 ; CHECK-LABEL: test_vqdmlsdhxq_m_s32:
400 ; CHECK: @ %bb.0: @ %entry
401 ; CHECK-NEXT: vmsr p0, r0
403 ; CHECK-NEXT: vqdmlsdhxt.s32 q0, q1, q2
406 %0 = zext i16 %p to i32
407 %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
408 %2 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 1, i32 0, i32 1, <4 x i1> %1)
412 define arm_aapcs_vfpcc <16 x i8> @test_vqrdmladhq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
413 ; CHECK-LABEL: test_vqrdmladhq_m_s8:
414 ; CHECK: @ %bb.0: @ %entry
415 ; CHECK-NEXT: vmsr p0, r0
417 ; CHECK-NEXT: vqrdmladht.s8 q0, q1, q2
420 %0 = zext i16 %p to i32
421 %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
422 %2 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 0, i32 1, i32 0, <16 x i1> %1)
426 define arm_aapcs_vfpcc <8 x i16> @test_vqrdmladhq_m_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
427 ; CHECK-LABEL: test_vqrdmladhq_m_s16:
428 ; CHECK: @ %bb.0: @ %entry
429 ; CHECK-NEXT: vmsr p0, r0
431 ; CHECK-NEXT: vqrdmladht.s16 q0, q1, q2
434 %0 = zext i16 %p to i32
435 %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
436 %2 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 0, i32 1, i32 0, <8 x i1> %1)
440 define arm_aapcs_vfpcc <4 x i32> @test_vqrdmladhq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
441 ; CHECK-LABEL: test_vqrdmladhq_m_s32:
442 ; CHECK: @ %bb.0: @ %entry
443 ; CHECK-NEXT: vmsr p0, r0
445 ; CHECK-NEXT: vqrdmladht.s32 q0, q1, q2
448 %0 = zext i16 %p to i32
449 %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
450 %2 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 0, i32 1, i32 0, <4 x i1> %1)
454 define arm_aapcs_vfpcc <16 x i8> @test_vqrdmladhxq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
455 ; CHECK-LABEL: test_vqrdmladhxq_m_s8:
456 ; CHECK: @ %bb.0: @ %entry
457 ; CHECK-NEXT: vmsr p0, r0
459 ; CHECK-NEXT: vqrdmladhxt.s8 q0, q1, q2
462 %0 = zext i16 %p to i32
463 %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
464 %2 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 1, i32 1, i32 0, <16 x i1> %1)
468 define arm_aapcs_vfpcc <8 x i16> @test_vqrdmladhxq_m_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
469 ; CHECK-LABEL: test_vqrdmladhxq_m_s16:
470 ; CHECK: @ %bb.0: @ %entry
471 ; CHECK-NEXT: vmsr p0, r0
473 ; CHECK-NEXT: vqrdmladhxt.s16 q0, q1, q2
476 %0 = zext i16 %p to i32
477 %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
478 %2 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 1, i32 1, i32 0, <8 x i1> %1)
482 define arm_aapcs_vfpcc <4 x i32> @test_vqrdmladhxq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
483 ; CHECK-LABEL: test_vqrdmladhxq_m_s32:
484 ; CHECK: @ %bb.0: @ %entry
485 ; CHECK-NEXT: vmsr p0, r0
487 ; CHECK-NEXT: vqrdmladhxt.s32 q0, q1, q2
490 %0 = zext i16 %p to i32
491 %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
492 %2 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 1, i32 1, i32 0, <4 x i1> %1)
496 define arm_aapcs_vfpcc <16 x i8> @test_vqrdmlsdhq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
497 ; CHECK-LABEL: test_vqrdmlsdhq_m_s8:
498 ; CHECK: @ %bb.0: @ %entry
499 ; CHECK-NEXT: vmsr p0, r0
501 ; CHECK-NEXT: vqrdmlsdht.s8 q0, q1, q2
504 %0 = zext i16 %p to i32
505 %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
506 %2 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 0, i32 1, i32 1, <16 x i1> %1)
510 define arm_aapcs_vfpcc <8 x i16> @test_vqrdmlsdhq_m_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
511 ; CHECK-LABEL: test_vqrdmlsdhq_m_s16:
512 ; CHECK: @ %bb.0: @ %entry
513 ; CHECK-NEXT: vmsr p0, r0
515 ; CHECK-NEXT: vqrdmlsdht.s16 q0, q1, q2
518 %0 = zext i16 %p to i32
519 %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
520 %2 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 0, i32 1, i32 1, <8 x i1> %1)
524 define arm_aapcs_vfpcc <4 x i32> @test_vqrdmlsdhq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
525 ; CHECK-LABEL: test_vqrdmlsdhq_m_s32:
526 ; CHECK: @ %bb.0: @ %entry
527 ; CHECK-NEXT: vmsr p0, r0
529 ; CHECK-NEXT: vqrdmlsdht.s32 q0, q1, q2
532 %0 = zext i16 %p to i32
533 %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
534 %2 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 0, i32 1, i32 1, <4 x i1> %1)
538 define arm_aapcs_vfpcc <16 x i8> @test_vqrdmlsdhxq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) {
539 ; CHECK-LABEL: test_vqrdmlsdhxq_m_s8:
540 ; CHECK: @ %bb.0: @ %entry
541 ; CHECK-NEXT: vmsr p0, r0
543 ; CHECK-NEXT: vqrdmlsdhxt.s8 q0, q1, q2
546 %0 = zext i16 %p to i32
547 %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
548 %2 = tail call <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i32 1, i32 1, i32 1, <16 x i1> %1)
552 define arm_aapcs_vfpcc <8 x i16> @test_vqrdmlsdhxq_m_s16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {
553 ; CHECK-LABEL: test_vqrdmlsdhxq_m_s16:
554 ; CHECK: @ %bb.0: @ %entry
555 ; CHECK-NEXT: vmsr p0, r0
557 ; CHECK-NEXT: vqrdmlsdhxt.s16 q0, q1, q2
560 %0 = zext i16 %p to i32
561 %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
562 %2 = tail call <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i32 1, i32 1, i32 1, <8 x i1> %1)
566 define arm_aapcs_vfpcc <4 x i32> @test_vqrdmlsdhxq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {
567 ; CHECK-LABEL: test_vqrdmlsdhxq_m_s32:
568 ; CHECK: @ %bb.0: @ %entry
569 ; CHECK-NEXT: vmsr p0, r0
571 ; CHECK-NEXT: vqrdmlsdhxt.s32 q0, q1, q2
574 %0 = zext i16 %p to i32
575 %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
576 %2 = tail call <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i32 1, i32 1, i32 1, <4 x i1> %1)
580 declare <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32)
581 declare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)
582 declare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)
584 declare <16 x i8> @llvm.arm.mve.vqdmlad.v16i8(<16 x i8>, <16 x i8>, <16 x i8>, i32, i32, i32)
585 declare <8 x i16> @llvm.arm.mve.vqdmlad.v8i16(<8 x i16>, <8 x i16>, <8 x i16>, i32, i32, i32)
586 declare <4 x i32> @llvm.arm.mve.vqdmlad.v4i32(<4 x i32>, <4 x i32>, <4 x i32>, i32, i32, i32)
587 declare <16 x i8> @llvm.arm.mve.vqdmlad.predicated.v16i8.v16i1(<16 x i8>, <16 x i8>, <16 x i8>, i32, i32, i32, <16 x i1>)
588 declare <8 x i16> @llvm.arm.mve.vqdmlad.predicated.v8i16.v8i1(<8 x i16>, <8 x i16>, <8 x i16>, i32, i32, i32, <8 x i1>)
589 declare <4 x i32> @llvm.arm.mve.vqdmlad.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, <4 x i32>, i32, i32, i32, <4 x i1>)