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 -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 -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s
4
5 // REQUIRES: aarch64-registered-target || arm-registered-target
6
7 #include <arm_mve.h>
8
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]]
13 //
test_vqdmladhq_s8(int8x16_t inactive,int8x16_t a,int8x16_t b)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 */
20 }
21
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]]
26 //
test_vqdmladhq_s16(int16x8_t inactive,int16x8_t a,int16x8_t b)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 */
33 }
34
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]]
39 //
test_vqdmladhq_s32(int32x4_t inactive,int32x4_t a,int32x4_t b)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 */
46 }
47
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]]
52 //
test_vqdmladhxq_s8(int8x16_t inactive,int8x16_t a,int8x16_t b)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 */
59 }
60
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]]
65 //
test_vqdmladhxq_s16(int16x8_t inactive,int16x8_t a,int16x8_t b)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 */
72 }
73
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]]
78 //
test_vqdmladhxq_s32(int32x4_t inactive,int32x4_t a,int32x4_t b)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 */
85 }
86
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]]
91 //
test_vqdmlsdhq_s8(int8x16_t inactive,int8x16_t a,int8x16_t b)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 */
98 }
99
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]]
104 //
test_vqdmlsdhq_s16(int16x8_t inactive,int16x8_t a,int16x8_t b)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 */
111 }
112
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]]
117 //
test_vqdmlsdhq_s32(int32x4_t inactive,int32x4_t a,int32x4_t b)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 */
124 }
125
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]]
130 //
test_vqdmlsdhxq_s8(int8x16_t inactive,int8x16_t a,int8x16_t b)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 */
137 }
138
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]]
143 //
test_vqdmlsdhxq_s16(int16x8_t inactive,int16x8_t a,int16x8_t b)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 */
150 }
151
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]]
156 //
test_vqdmlsdhxq_s32(int32x4_t inactive,int32x4_t a,int32x4_t b)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 */
163 }
164
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]]
169 //
test_vqrdmladhq_s8(int8x16_t inactive,int8x16_t a,int8x16_t b)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 */
176 }
177
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]]
182 //
test_vqrdmladhq_s16(int16x8_t inactive,int16x8_t a,int16x8_t b)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 */
189 }
190
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]]
195 //
test_vqrdmladhq_s32(int32x4_t inactive,int32x4_t a,int32x4_t b)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 */
202 }
203
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]]
208 //
test_vqrdmladhxq_s8(int8x16_t inactive,int8x16_t a,int8x16_t b)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 */
215 }
216
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]]
221 //
test_vqrdmladhxq_s16(int16x8_t inactive,int16x8_t a,int16x8_t b)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 */
228 }
229
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]]
234 //
test_vqrdmladhxq_s32(int32x4_t inactive,int32x4_t a,int32x4_t b)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 */
241 }
242
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]]
247 //
test_vqrdmlsdhq_s8(int8x16_t inactive,int8x16_t a,int8x16_t b)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 */
254 }
255
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]]
260 //
test_vqrdmlsdhq_s16(int16x8_t inactive,int16x8_t a,int16x8_t b)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 */
267 }
268
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]]
273 //
test_vqrdmlsdhq_s32(int32x4_t inactive,int32x4_t a,int32x4_t b)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 */
280 }
281
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]]
286 //
test_vqrdmlsdhxq_s8(int8x16_t inactive,int8x16_t a,int8x16_t b)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 */
293 }
294
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]]
299 //
test_vqrdmlsdhxq_s16(int16x8_t inactive,int16x8_t a,int16x8_t b)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 */
306 }
307
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]]
312 //
test_vqrdmlsdhxq_s32(int32x4_t inactive,int32x4_t a,int32x4_t b)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 */
319 }
320
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]]
327 //
test_vqdmladhq_m_s8(int8x16_t inactive,int8x16_t a,int8x16_t b,mve_pred16_t p)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 */
334 }
335
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]]
342 //
test_vqdmladhq_m_s16(int16x8_t inactive,int16x8_t a,int16x8_t b,mve_pred16_t p)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 */
349 }
350
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]]
357 //
test_vqdmladhq_m_s32(int32x4_t inactive,int32x4_t a,int32x4_t b,mve_pred16_t p)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 */
364 }
365
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]]
372 //
test_vqdmladhxq_m_s8(int8x16_t inactive,int8x16_t a,int8x16_t b,mve_pred16_t p)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 */
379 }
380
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]]
387 //
test_vqdmladhxq_m_s16(int16x8_t inactive,int16x8_t a,int16x8_t b,mve_pred16_t p)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 */
394 }
395
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]]
402 //
test_vqdmladhxq_m_s32(int32x4_t inactive,int32x4_t a,int32x4_t b,mve_pred16_t p)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 */
409 }
410
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]]
417 //
test_vqdmlsdhq_m_s8(int8x16_t inactive,int8x16_t a,int8x16_t b,mve_pred16_t p)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 */
424 }
425
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]]
432 //
test_vqdmlsdhq_m_s16(int16x8_t inactive,int16x8_t a,int16x8_t b,mve_pred16_t p)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 */
439 }
440
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]]
447 //
test_vqdmlsdhq_m_s32(int32x4_t inactive,int32x4_t a,int32x4_t b,mve_pred16_t p)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 */
454 }
455
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]]
462 //
test_vqdmlsdhxq_m_s8(int8x16_t inactive,int8x16_t a,int8x16_t b,mve_pred16_t p)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 */
469 }
470
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]]
477 //
test_vqdmlsdhxq_m_s16(int16x8_t inactive,int16x8_t a,int16x8_t b,mve_pred16_t p)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 */
484 }
485
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]]
492 //
test_vqdmlsdhxq_m_s32(int32x4_t inactive,int32x4_t a,int32x4_t b,mve_pred16_t p)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 */
499 }
500
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]]
507 //
test_vqrdmladhq_m_s8(int8x16_t inactive,int8x16_t a,int8x16_t b,mve_pred16_t p)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 */
514 }
515
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]]
522 //
test_vqrdmladhq_m_s16(int16x8_t inactive,int16x8_t a,int16x8_t b,mve_pred16_t p)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 */
529 }
530
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]]
537 //
test_vqrdmladhq_m_s32(int32x4_t inactive,int32x4_t a,int32x4_t b,mve_pred16_t p)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 */
544 }
545
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]]
552 //
test_vqrdmladhxq_m_s8(int8x16_t inactive,int8x16_t a,int8x16_t b,mve_pred16_t p)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 */
559 }
560
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]]
567 //
test_vqrdmladhxq_m_s16(int16x8_t inactive,int16x8_t a,int16x8_t b,mve_pred16_t p)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 */
574 }
575
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]]
582 //
test_vqrdmladhxq_m_s32(int32x4_t inactive,int32x4_t a,int32x4_t b,mve_pred16_t p)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 */
589 }
590
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]]
597 //
test_vqrdmlsdhq_m_s8(int8x16_t inactive,int8x16_t a,int8x16_t b,mve_pred16_t p)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 */
604 }
605
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]]
612 //
test_vqrdmlsdhq_m_s16(int16x8_t inactive,int16x8_t a,int16x8_t b,mve_pred16_t p)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 */
619 }
620
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]]
627 //
test_vqrdmlsdhq_m_s32(int32x4_t inactive,int32x4_t a,int32x4_t b,mve_pred16_t p)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 */
634 }
635
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]]
642 //
test_vqrdmlsdhxq_m_s8(int8x16_t inactive,int8x16_t a,int8x16_t b,mve_pred16_t p)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 */
649 }
650
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]]
657 //
test_vqrdmlsdhxq_m_s16(int16x8_t inactive,int16x8_t a,int16x8_t b,mve_pred16_t p)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 */
664 }
665
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]]
672 //
test_vqrdmlsdhxq_m_s32(int32x4_t inactive,int32x4_t a,int32x4_t b,mve_pred16_t p)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 */
679 }
680