Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / CodeGen / arm-mve-intrinsics / vqdmlad.c
blob9c4ed0792255760eb74893e72ca362908661a36a
1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2 // RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -S -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s
3 // RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -DPOLYMORPHIC -S -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s
5 // REQUIRES: aarch64-registered-target || arm-registered-target
7 #include <arm_mve.h>
9 // CHECK-LABEL: @test_vqdmladhq_s8(
10 // CHECK-NEXT: entry:
11 // CHECK-NEXT: [[TMP0:%.*]] = 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)
12 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
14 int8x16_t test_vqdmladhq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {
15 #ifdef POLYMORPHIC
16 return vqdmladhq(inactive, a, b);
17 #else /* POLYMORPHIC */
18 return vqdmladhq_s8(inactive, a, b);
19 #endif /* POLYMORPHIC */
22 // CHECK-LABEL: @test_vqdmladhq_s16(
23 // CHECK-NEXT: entry:
24 // CHECK-NEXT: [[TMP0:%.*]] = 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)
25 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
27 int16x8_t test_vqdmladhq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {
28 #ifdef POLYMORPHIC
29 return vqdmladhq(inactive, a, b);
30 #else /* POLYMORPHIC */
31 return vqdmladhq_s16(inactive, a, b);
32 #endif /* POLYMORPHIC */
35 // CHECK-LABEL: @test_vqdmladhq_s32(
36 // CHECK-NEXT: entry:
37 // CHECK-NEXT: [[TMP0:%.*]] = 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)
38 // CHECK-NEXT: ret <4 x i32> [[TMP0]]
40 int32x4_t test_vqdmladhq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {
41 #ifdef POLYMORPHIC
42 return vqdmladhq(inactive, a, b);
43 #else /* POLYMORPHIC */
44 return vqdmladhq_s32(inactive, a, b);
45 #endif /* POLYMORPHIC */
48 // CHECK-LABEL: @test_vqdmladhxq_s8(
49 // CHECK-NEXT: entry:
50 // CHECK-NEXT: [[TMP0:%.*]] = 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)
51 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
53 int8x16_t test_vqdmladhxq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {
54 #ifdef POLYMORPHIC
55 return vqdmladhxq(inactive, a, b);
56 #else /* POLYMORPHIC */
57 return vqdmladhxq_s8(inactive, a, b);
58 #endif /* POLYMORPHIC */
61 // CHECK-LABEL: @test_vqdmladhxq_s16(
62 // CHECK-NEXT: entry:
63 // CHECK-NEXT: [[TMP0:%.*]] = 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)
64 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
66 int16x8_t test_vqdmladhxq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {
67 #ifdef POLYMORPHIC
68 return vqdmladhxq(inactive, a, b);
69 #else /* POLYMORPHIC */
70 return vqdmladhxq_s16(inactive, a, b);
71 #endif /* POLYMORPHIC */
74 // CHECK-LABEL: @test_vqdmladhxq_s32(
75 // CHECK-NEXT: entry:
76 // CHECK-NEXT: [[TMP0:%.*]] = 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)
77 // CHECK-NEXT: ret <4 x i32> [[TMP0]]
79 int32x4_t test_vqdmladhxq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {
80 #ifdef POLYMORPHIC
81 return vqdmladhxq(inactive, a, b);
82 #else /* POLYMORPHIC */
83 return vqdmladhxq_s32(inactive, a, b);
84 #endif /* POLYMORPHIC */
87 // CHECK-LABEL: @test_vqdmlsdhq_s8(
88 // CHECK-NEXT: entry:
89 // CHECK-NEXT: [[TMP0:%.*]] = 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)
90 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
92 int8x16_t test_vqdmlsdhq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {
93 #ifdef POLYMORPHIC
94 return vqdmlsdhq(inactive, a, b);
95 #else /* POLYMORPHIC */
96 return vqdmlsdhq_s8(inactive, a, b);
97 #endif /* POLYMORPHIC */
100 // CHECK-LABEL: @test_vqdmlsdhq_s16(
101 // CHECK-NEXT: entry:
102 // CHECK-NEXT: [[TMP0:%.*]] = 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)
103 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
105 int16x8_t test_vqdmlsdhq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {
106 #ifdef POLYMORPHIC
107 return vqdmlsdhq(inactive, a, b);
108 #else /* POLYMORPHIC */
109 return vqdmlsdhq_s16(inactive, a, b);
110 #endif /* POLYMORPHIC */
113 // CHECK-LABEL: @test_vqdmlsdhq_s32(
114 // CHECK-NEXT: entry:
115 // CHECK-NEXT: [[TMP0:%.*]] = 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)
116 // CHECK-NEXT: ret <4 x i32> [[TMP0]]
118 int32x4_t test_vqdmlsdhq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {
119 #ifdef POLYMORPHIC
120 return vqdmlsdhq(inactive, a, b);
121 #else /* POLYMORPHIC */
122 return vqdmlsdhq_s32(inactive, a, b);
123 #endif /* POLYMORPHIC */
126 // CHECK-LABEL: @test_vqdmlsdhxq_s8(
127 // CHECK-NEXT: entry:
128 // CHECK-NEXT: [[TMP0:%.*]] = 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)
129 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
131 int8x16_t test_vqdmlsdhxq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {
132 #ifdef POLYMORPHIC
133 return vqdmlsdhxq(inactive, a, b);
134 #else /* POLYMORPHIC */
135 return vqdmlsdhxq_s8(inactive, a, b);
136 #endif /* POLYMORPHIC */
139 // CHECK-LABEL: @test_vqdmlsdhxq_s16(
140 // CHECK-NEXT: entry:
141 // CHECK-NEXT: [[TMP0:%.*]] = 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)
142 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
144 int16x8_t test_vqdmlsdhxq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {
145 #ifdef POLYMORPHIC
146 return vqdmlsdhxq(inactive, a, b);
147 #else /* POLYMORPHIC */
148 return vqdmlsdhxq_s16(inactive, a, b);
149 #endif /* POLYMORPHIC */
152 // CHECK-LABEL: @test_vqdmlsdhxq_s32(
153 // CHECK-NEXT: entry:
154 // CHECK-NEXT: [[TMP0:%.*]] = 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)
155 // CHECK-NEXT: ret <4 x i32> [[TMP0]]
157 int32x4_t test_vqdmlsdhxq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {
158 #ifdef POLYMORPHIC
159 return vqdmlsdhxq(inactive, a, b);
160 #else /* POLYMORPHIC */
161 return vqdmlsdhxq_s32(inactive, a, b);
162 #endif /* POLYMORPHIC */
165 // CHECK-LABEL: @test_vqrdmladhq_s8(
166 // CHECK-NEXT: entry:
167 // CHECK-NEXT: [[TMP0:%.*]] = 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)
168 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
170 int8x16_t test_vqrdmladhq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {
171 #ifdef POLYMORPHIC
172 return vqrdmladhq(inactive, a, b);
173 #else /* POLYMORPHIC */
174 return vqrdmladhq_s8(inactive, a, b);
175 #endif /* POLYMORPHIC */
178 // CHECK-LABEL: @test_vqrdmladhq_s16(
179 // CHECK-NEXT: entry:
180 // CHECK-NEXT: [[TMP0:%.*]] = 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)
181 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
183 int16x8_t test_vqrdmladhq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {
184 #ifdef POLYMORPHIC
185 return vqrdmladhq(inactive, a, b);
186 #else /* POLYMORPHIC */
187 return vqrdmladhq_s16(inactive, a, b);
188 #endif /* POLYMORPHIC */
191 // CHECK-LABEL: @test_vqrdmladhq_s32(
192 // CHECK-NEXT: entry:
193 // CHECK-NEXT: [[TMP0:%.*]] = 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)
194 // CHECK-NEXT: ret <4 x i32> [[TMP0]]
196 int32x4_t test_vqrdmladhq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {
197 #ifdef POLYMORPHIC
198 return vqrdmladhq(inactive, a, b);
199 #else /* POLYMORPHIC */
200 return vqrdmladhq_s32(inactive, a, b);
201 #endif /* POLYMORPHIC */
204 // CHECK-LABEL: @test_vqrdmladhxq_s8(
205 // CHECK-NEXT: entry:
206 // CHECK-NEXT: [[TMP0:%.*]] = 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)
207 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
209 int8x16_t test_vqrdmladhxq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {
210 #ifdef POLYMORPHIC
211 return vqrdmladhxq(inactive, a, b);
212 #else /* POLYMORPHIC */
213 return vqrdmladhxq_s8(inactive, a, b);
214 #endif /* POLYMORPHIC */
217 // CHECK-LABEL: @test_vqrdmladhxq_s16(
218 // CHECK-NEXT: entry:
219 // CHECK-NEXT: [[TMP0:%.*]] = 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)
220 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
222 int16x8_t test_vqrdmladhxq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {
223 #ifdef POLYMORPHIC
224 return vqrdmladhxq(inactive, a, b);
225 #else /* POLYMORPHIC */
226 return vqrdmladhxq_s16(inactive, a, b);
227 #endif /* POLYMORPHIC */
230 // CHECK-LABEL: @test_vqrdmladhxq_s32(
231 // CHECK-NEXT: entry:
232 // CHECK-NEXT: [[TMP0:%.*]] = 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)
233 // CHECK-NEXT: ret <4 x i32> [[TMP0]]
235 int32x4_t test_vqrdmladhxq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {
236 #ifdef POLYMORPHIC
237 return vqrdmladhxq(inactive, a, b);
238 #else /* POLYMORPHIC */
239 return vqrdmladhxq_s32(inactive, a, b);
240 #endif /* POLYMORPHIC */
243 // CHECK-LABEL: @test_vqrdmlsdhq_s8(
244 // CHECK-NEXT: entry:
245 // CHECK-NEXT: [[TMP0:%.*]] = 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)
246 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
248 int8x16_t test_vqrdmlsdhq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {
249 #ifdef POLYMORPHIC
250 return vqrdmlsdhq(inactive, a, b);
251 #else /* POLYMORPHIC */
252 return vqrdmlsdhq_s8(inactive, a, b);
253 #endif /* POLYMORPHIC */
256 // CHECK-LABEL: @test_vqrdmlsdhq_s16(
257 // CHECK-NEXT: entry:
258 // CHECK-NEXT: [[TMP0:%.*]] = 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)
259 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
261 int16x8_t test_vqrdmlsdhq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {
262 #ifdef POLYMORPHIC
263 return vqrdmlsdhq(inactive, a, b);
264 #else /* POLYMORPHIC */
265 return vqrdmlsdhq_s16(inactive, a, b);
266 #endif /* POLYMORPHIC */
269 // CHECK-LABEL: @test_vqrdmlsdhq_s32(
270 // CHECK-NEXT: entry:
271 // CHECK-NEXT: [[TMP0:%.*]] = 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)
272 // CHECK-NEXT: ret <4 x i32> [[TMP0]]
274 int32x4_t test_vqrdmlsdhq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {
275 #ifdef POLYMORPHIC
276 return vqrdmlsdhq(inactive, a, b);
277 #else /* POLYMORPHIC */
278 return vqrdmlsdhq_s32(inactive, a, b);
279 #endif /* POLYMORPHIC */
282 // CHECK-LABEL: @test_vqrdmlsdhxq_s8(
283 // CHECK-NEXT: entry:
284 // CHECK-NEXT: [[TMP0:%.*]] = 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)
285 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
287 int8x16_t test_vqrdmlsdhxq_s8(int8x16_t inactive, int8x16_t a, int8x16_t b) {
288 #ifdef POLYMORPHIC
289 return vqrdmlsdhxq(inactive, a, b);
290 #else /* POLYMORPHIC */
291 return vqrdmlsdhxq_s8(inactive, a, b);
292 #endif /* POLYMORPHIC */
295 // CHECK-LABEL: @test_vqrdmlsdhxq_s16(
296 // CHECK-NEXT: entry:
297 // CHECK-NEXT: [[TMP0:%.*]] = 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)
298 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
300 int16x8_t test_vqrdmlsdhxq_s16(int16x8_t inactive, int16x8_t a, int16x8_t b) {
301 #ifdef POLYMORPHIC
302 return vqrdmlsdhxq(inactive, a, b);
303 #else /* POLYMORPHIC */
304 return vqrdmlsdhxq_s16(inactive, a, b);
305 #endif /* POLYMORPHIC */
308 // CHECK-LABEL: @test_vqrdmlsdhxq_s32(
309 // CHECK-NEXT: entry:
310 // CHECK-NEXT: [[TMP0:%.*]] = 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)
311 // CHECK-NEXT: ret <4 x i32> [[TMP0]]
313 int32x4_t test_vqrdmlsdhxq_s32(int32x4_t inactive, int32x4_t a, int32x4_t b) {
314 #ifdef POLYMORPHIC
315 return vqrdmlsdhxq(inactive, a, b);
316 #else /* POLYMORPHIC */
317 return vqrdmlsdhxq_s32(inactive, a, b);
318 #endif /* POLYMORPHIC */
321 // CHECK-LABEL: @test_vqdmladhq_m_s8(
322 // CHECK-NEXT: entry:
323 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
324 // CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
325 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
326 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
328 int8x16_t test_vqdmladhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {
329 #ifdef POLYMORPHIC
330 return vqdmladhq_m(inactive, a, b, p);
331 #else /* POLYMORPHIC */
332 return vqdmladhq_m_s8(inactive, a, b, p);
333 #endif /* POLYMORPHIC */
336 // CHECK-LABEL: @test_vqdmladhq_m_s16(
337 // CHECK-NEXT: entry:
338 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
339 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
340 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
341 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
343 int16x8_t test_vqdmladhq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {
344 #ifdef POLYMORPHIC
345 return vqdmladhq_m(inactive, a, b, p);
346 #else /* POLYMORPHIC */
347 return vqdmladhq_m_s16(inactive, a, b, p);
348 #endif /* POLYMORPHIC */
351 // CHECK-LABEL: @test_vqdmladhq_m_s32(
352 // CHECK-NEXT: entry:
353 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
354 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
355 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
356 // CHECK-NEXT: ret <4 x i32> [[TMP2]]
358 int32x4_t test_vqdmladhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {
359 #ifdef POLYMORPHIC
360 return vqdmladhq_m(inactive, a, b, p);
361 #else /* POLYMORPHIC */
362 return vqdmladhq_m_s32(inactive, a, b, p);
363 #endif /* POLYMORPHIC */
366 // CHECK-LABEL: @test_vqdmladhxq_m_s8(
367 // CHECK-NEXT: entry:
368 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
369 // CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
370 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
371 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
373 int8x16_t test_vqdmladhxq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {
374 #ifdef POLYMORPHIC
375 return vqdmladhxq_m(inactive, a, b, p);
376 #else /* POLYMORPHIC */
377 return vqdmladhxq_m_s8(inactive, a, b, p);
378 #endif /* POLYMORPHIC */
381 // CHECK-LABEL: @test_vqdmladhxq_m_s16(
382 // CHECK-NEXT: entry:
383 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
384 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
385 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
386 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
388 int16x8_t test_vqdmladhxq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {
389 #ifdef POLYMORPHIC
390 return vqdmladhxq_m(inactive, a, b, p);
391 #else /* POLYMORPHIC */
392 return vqdmladhxq_m_s16(inactive, a, b, p);
393 #endif /* POLYMORPHIC */
396 // CHECK-LABEL: @test_vqdmladhxq_m_s32(
397 // CHECK-NEXT: entry:
398 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
399 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
400 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
401 // CHECK-NEXT: ret <4 x i32> [[TMP2]]
403 int32x4_t test_vqdmladhxq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {
404 #ifdef POLYMORPHIC
405 return vqdmladhxq_m(inactive, a, b, p);
406 #else /* POLYMORPHIC */
407 return vqdmladhxq_m_s32(inactive, a, b, p);
408 #endif /* POLYMORPHIC */
411 // CHECK-LABEL: @test_vqdmlsdhq_m_s8(
412 // CHECK-NEXT: entry:
413 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
414 // CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
415 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
416 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
418 int8x16_t test_vqdmlsdhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {
419 #ifdef POLYMORPHIC
420 return vqdmlsdhq_m(inactive, a, b, p);
421 #else /* POLYMORPHIC */
422 return vqdmlsdhq_m_s8(inactive, a, b, p);
423 #endif /* POLYMORPHIC */
426 // CHECK-LABEL: @test_vqdmlsdhq_m_s16(
427 // CHECK-NEXT: entry:
428 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
429 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
430 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
431 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
433 int16x8_t test_vqdmlsdhq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {
434 #ifdef POLYMORPHIC
435 return vqdmlsdhq_m(inactive, a, b, p);
436 #else /* POLYMORPHIC */
437 return vqdmlsdhq_m_s16(inactive, a, b, p);
438 #endif /* POLYMORPHIC */
441 // CHECK-LABEL: @test_vqdmlsdhq_m_s32(
442 // CHECK-NEXT: entry:
443 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
444 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
445 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
446 // CHECK-NEXT: ret <4 x i32> [[TMP2]]
448 int32x4_t test_vqdmlsdhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {
449 #ifdef POLYMORPHIC
450 return vqdmlsdhq_m(inactive, a, b, p);
451 #else /* POLYMORPHIC */
452 return vqdmlsdhq_m_s32(inactive, a, b, p);
453 #endif /* POLYMORPHIC */
456 // CHECK-LABEL: @test_vqdmlsdhxq_m_s8(
457 // CHECK-NEXT: entry:
458 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
459 // CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
460 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
461 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
463 int8x16_t test_vqdmlsdhxq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {
464 #ifdef POLYMORPHIC
465 return vqdmlsdhxq_m(inactive, a, b, p);
466 #else /* POLYMORPHIC */
467 return vqdmlsdhxq_m_s8(inactive, a, b, p);
468 #endif /* POLYMORPHIC */
471 // CHECK-LABEL: @test_vqdmlsdhxq_m_s16(
472 // CHECK-NEXT: entry:
473 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
474 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
475 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
476 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
478 int16x8_t test_vqdmlsdhxq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {
479 #ifdef POLYMORPHIC
480 return vqdmlsdhxq_m(inactive, a, b, p);
481 #else /* POLYMORPHIC */
482 return vqdmlsdhxq_m_s16(inactive, a, b, p);
483 #endif /* POLYMORPHIC */
486 // CHECK-LABEL: @test_vqdmlsdhxq_m_s32(
487 // CHECK-NEXT: entry:
488 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
489 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
490 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
491 // CHECK-NEXT: ret <4 x i32> [[TMP2]]
493 int32x4_t test_vqdmlsdhxq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {
494 #ifdef POLYMORPHIC
495 return vqdmlsdhxq_m(inactive, a, b, p);
496 #else /* POLYMORPHIC */
497 return vqdmlsdhxq_m_s32(inactive, a, b, p);
498 #endif /* POLYMORPHIC */
501 // CHECK-LABEL: @test_vqrdmladhq_m_s8(
502 // CHECK-NEXT: entry:
503 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
504 // CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
505 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
506 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
508 int8x16_t test_vqrdmladhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {
509 #ifdef POLYMORPHIC
510 return vqrdmladhq_m(inactive, a, b, p);
511 #else /* POLYMORPHIC */
512 return vqrdmladhq_m_s8(inactive, a, b, p);
513 #endif /* POLYMORPHIC */
516 // CHECK-LABEL: @test_vqrdmladhq_m_s16(
517 // CHECK-NEXT: entry:
518 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
519 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
520 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
521 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
523 int16x8_t test_vqrdmladhq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {
524 #ifdef POLYMORPHIC
525 return vqrdmladhq_m(inactive, a, b, p);
526 #else /* POLYMORPHIC */
527 return vqrdmladhq_m_s16(inactive, a, b, p);
528 #endif /* POLYMORPHIC */
531 // CHECK-LABEL: @test_vqrdmladhq_m_s32(
532 // CHECK-NEXT: entry:
533 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
534 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
535 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
536 // CHECK-NEXT: ret <4 x i32> [[TMP2]]
538 int32x4_t test_vqrdmladhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {
539 #ifdef POLYMORPHIC
540 return vqrdmladhq_m(inactive, a, b, p);
541 #else /* POLYMORPHIC */
542 return vqrdmladhq_m_s32(inactive, a, b, p);
543 #endif /* POLYMORPHIC */
546 // CHECK-LABEL: @test_vqrdmladhxq_m_s8(
547 // CHECK-NEXT: entry:
548 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
549 // CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
550 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
551 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
553 int8x16_t test_vqrdmladhxq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {
554 #ifdef POLYMORPHIC
555 return vqrdmladhxq_m(inactive, a, b, p);
556 #else /* POLYMORPHIC */
557 return vqrdmladhxq_m_s8(inactive, a, b, p);
558 #endif /* POLYMORPHIC */
561 // CHECK-LABEL: @test_vqrdmladhxq_m_s16(
562 // CHECK-NEXT: entry:
563 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
564 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
565 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
566 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
568 int16x8_t test_vqrdmladhxq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {
569 #ifdef POLYMORPHIC
570 return vqrdmladhxq_m(inactive, a, b, p);
571 #else /* POLYMORPHIC */
572 return vqrdmladhxq_m_s16(inactive, a, b, p);
573 #endif /* POLYMORPHIC */
576 // CHECK-LABEL: @test_vqrdmladhxq_m_s32(
577 // CHECK-NEXT: entry:
578 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
579 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
580 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
581 // CHECK-NEXT: ret <4 x i32> [[TMP2]]
583 int32x4_t test_vqrdmladhxq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {
584 #ifdef POLYMORPHIC
585 return vqrdmladhxq_m(inactive, a, b, p);
586 #else /* POLYMORPHIC */
587 return vqrdmladhxq_m_s32(inactive, a, b, p);
588 #endif /* POLYMORPHIC */
591 // CHECK-LABEL: @test_vqrdmlsdhq_m_s8(
592 // CHECK-NEXT: entry:
593 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
594 // CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
595 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
596 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
598 int8x16_t test_vqrdmlsdhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {
599 #ifdef POLYMORPHIC
600 return vqrdmlsdhq_m(inactive, a, b, p);
601 #else /* POLYMORPHIC */
602 return vqrdmlsdhq_m_s8(inactive, a, b, p);
603 #endif /* POLYMORPHIC */
606 // CHECK-LABEL: @test_vqrdmlsdhq_m_s16(
607 // CHECK-NEXT: entry:
608 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
609 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
610 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
611 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
613 int16x8_t test_vqrdmlsdhq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {
614 #ifdef POLYMORPHIC
615 return vqrdmlsdhq_m(inactive, a, b, p);
616 #else /* POLYMORPHIC */
617 return vqrdmlsdhq_m_s16(inactive, a, b, p);
618 #endif /* POLYMORPHIC */
621 // CHECK-LABEL: @test_vqrdmlsdhq_m_s32(
622 // CHECK-NEXT: entry:
623 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
624 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
625 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
626 // CHECK-NEXT: ret <4 x i32> [[TMP2]]
628 int32x4_t test_vqrdmlsdhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {
629 #ifdef POLYMORPHIC
630 return vqrdmlsdhq_m(inactive, a, b, p);
631 #else /* POLYMORPHIC */
632 return vqrdmlsdhq_m_s32(inactive, a, b, p);
633 #endif /* POLYMORPHIC */
636 // CHECK-LABEL: @test_vqrdmlsdhxq_m_s8(
637 // CHECK-NEXT: entry:
638 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
639 // CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]])
640 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
641 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
643 int8x16_t test_vqrdmlsdhxq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) {
644 #ifdef POLYMORPHIC
645 return vqrdmlsdhxq_m(inactive, a, b, p);
646 #else /* POLYMORPHIC */
647 return vqrdmlsdhxq_m_s8(inactive, a, b, p);
648 #endif /* POLYMORPHIC */
651 // CHECK-LABEL: @test_vqrdmlsdhxq_m_s16(
652 // CHECK-NEXT: entry:
653 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
654 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
655 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
656 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
658 int16x8_t test_vqrdmlsdhxq_m_s16(int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) {
659 #ifdef POLYMORPHIC
660 return vqrdmlsdhxq_m(inactive, a, b, p);
661 #else /* POLYMORPHIC */
662 return vqrdmlsdhxq_m_s16(inactive, a, b, p);
663 #endif /* POLYMORPHIC */
666 // CHECK-LABEL: @test_vqrdmlsdhxq_m_s32(
667 // CHECK-NEXT: entry:
668 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
669 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
670 // CHECK-NEXT: [[TMP2:%.*]] = 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> [[TMP1]])
671 // CHECK-NEXT: ret <4 x i32> [[TMP2]]
673 int32x4_t test_vqrdmlsdhxq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) {
674 #ifdef POLYMORPHIC
675 return vqrdmlsdhxq_m(inactive, a, b, p);
676 #else /* POLYMORPHIC */
677 return vqrdmlsdhxq_m_s32(inactive, a, b, p);
678 #endif /* POLYMORPHIC */