xref: /llvm-project/clang/test/CodeGen/arm-mve-intrinsics/vqdmlad.c (revision c5de4dd1eab00df76c1a68c5f397304ceacb71f2)
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