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 -mfloat-abi hard -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s
3 // RUN: %clang_cc1 -DPOLYMORPHIC -triple thumbv8.1m.main-none-none-eabi -target-feature +mve -mfloat-abi hard -O0 -disable-O0-optnone -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_vqmovnbq_s16(
10 // CHECK-NEXT: entry:
11 // CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 0)
12 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
13 //
test_vqmovnbq_s16(int8x16_t a,int16x8_t b)14 int8x16_t test_vqmovnbq_s16(int8x16_t a, int16x8_t b)
15 {
16 #ifdef POLYMORPHIC
17 return vqmovnbq(a, b);
18 #else /* POLYMORPHIC */
19 return vqmovnbq_s16(a, b);
20 #endif /* POLYMORPHIC */
21 }
22
23 // CHECK-LABEL: @test_vqmovnbq_s32(
24 // CHECK-NEXT: entry:
25 // CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 0)
26 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
27 //
test_vqmovnbq_s32(int16x8_t a,int32x4_t b)28 int16x8_t test_vqmovnbq_s32(int16x8_t a, int32x4_t b)
29 {
30 #ifdef POLYMORPHIC
31 return vqmovnbq(a, b);
32 #else /* POLYMORPHIC */
33 return vqmovnbq_s32(a, b);
34 #endif /* POLYMORPHIC */
35 }
36
37 // CHECK-LABEL: @test_vqmovnbq_u16(
38 // CHECK-NEXT: entry:
39 // CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0)
40 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
41 //
test_vqmovnbq_u16(uint8x16_t a,uint16x8_t b)42 uint8x16_t test_vqmovnbq_u16(uint8x16_t a, uint16x8_t b)
43 {
44 #ifdef POLYMORPHIC
45 return vqmovnbq(a, b);
46 #else /* POLYMORPHIC */
47 return vqmovnbq_u16(a, b);
48 #endif /* POLYMORPHIC */
49 }
50
51 // CHECK-LABEL: @test_vqmovnbq_u32(
52 // CHECK-NEXT: entry:
53 // CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 0)
54 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
55 //
test_vqmovnbq_u32(uint16x8_t a,uint32x4_t b)56 uint16x8_t test_vqmovnbq_u32(uint16x8_t a, uint32x4_t b)
57 {
58 #ifdef POLYMORPHIC
59 return vqmovnbq(a, b);
60 #else /* POLYMORPHIC */
61 return vqmovnbq_u32(a, b);
62 #endif /* POLYMORPHIC */
63 }
64
65 // CHECK-LABEL: @test_vqmovntq_s16(
66 // CHECK-NEXT: entry:
67 // CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 1)
68 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
69 //
test_vqmovntq_s16(int8x16_t a,int16x8_t b)70 int8x16_t test_vqmovntq_s16(int8x16_t a, int16x8_t b)
71 {
72 #ifdef POLYMORPHIC
73 return vqmovntq(a, b);
74 #else /* POLYMORPHIC */
75 return vqmovntq_s16(a, b);
76 #endif /* POLYMORPHIC */
77 }
78
79 // CHECK-LABEL: @test_vqmovntq_s32(
80 // CHECK-NEXT: entry:
81 // CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 1)
82 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
83 //
test_vqmovntq_s32(int16x8_t a,int32x4_t b)84 int16x8_t test_vqmovntq_s32(int16x8_t a, int32x4_t b)
85 {
86 #ifdef POLYMORPHIC
87 return vqmovntq(a, b);
88 #else /* POLYMORPHIC */
89 return vqmovntq_s32(a, b);
90 #endif /* POLYMORPHIC */
91 }
92
93 // CHECK-LABEL: @test_vqmovntq_u16(
94 // CHECK-NEXT: entry:
95 // CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 1)
96 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
97 //
test_vqmovntq_u16(uint8x16_t a,uint16x8_t b)98 uint8x16_t test_vqmovntq_u16(uint8x16_t a, uint16x8_t b)
99 {
100 #ifdef POLYMORPHIC
101 return vqmovntq(a, b);
102 #else /* POLYMORPHIC */
103 return vqmovntq_u16(a, b);
104 #endif /* POLYMORPHIC */
105 }
106
107 // CHECK-LABEL: @test_vqmovntq_u32(
108 // CHECK-NEXT: entry:
109 // CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 1)
110 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
111 //
test_vqmovntq_u32(uint16x8_t a,uint32x4_t b)112 uint16x8_t test_vqmovntq_u32(uint16x8_t a, uint32x4_t b)
113 {
114 #ifdef POLYMORPHIC
115 return vqmovntq(a, b);
116 #else /* POLYMORPHIC */
117 return vqmovntq_u32(a, b);
118 #endif /* POLYMORPHIC */
119 }
120
121 // CHECK-LABEL: @test_vqmovunbq_s16(
122 // CHECK-NEXT: entry:
123 // CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0)
124 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
125 //
test_vqmovunbq_s16(uint8x16_t a,int16x8_t b)126 uint8x16_t test_vqmovunbq_s16(uint8x16_t a, int16x8_t b)
127 {
128 #ifdef POLYMORPHIC
129 return vqmovunbq(a, b);
130 #else /* POLYMORPHIC */
131 return vqmovunbq_s16(a, b);
132 #endif /* POLYMORPHIC */
133 }
134
135 // CHECK-LABEL: @test_vqmovunbq_s32(
136 // CHECK-NEXT: entry:
137 // CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 0)
138 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
139 //
test_vqmovunbq_s32(uint16x8_t a,int32x4_t b)140 uint16x8_t test_vqmovunbq_s32(uint16x8_t a, int32x4_t b)
141 {
142 #ifdef POLYMORPHIC
143 return vqmovunbq(a, b);
144 #else /* POLYMORPHIC */
145 return vqmovunbq_s32(a, b);
146 #endif /* POLYMORPHIC */
147 }
148
149 // CHECK-LABEL: @test_vqmovuntq_s16(
150 // CHECK-NEXT: entry:
151 // CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.v16i8.v8i16(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 1)
152 // CHECK-NEXT: ret <16 x i8> [[TMP0]]
153 //
test_vqmovuntq_s16(uint8x16_t a,int16x8_t b)154 uint8x16_t test_vqmovuntq_s16(uint8x16_t a, int16x8_t b)
155 {
156 #ifdef POLYMORPHIC
157 return vqmovuntq(a, b);
158 #else /* POLYMORPHIC */
159 return vqmovuntq_s16(a, b);
160 #endif /* POLYMORPHIC */
161 }
162
163 // CHECK-LABEL: @test_vqmovuntq_s32(
164 // CHECK-NEXT: entry:
165 // CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.v8i16.v4i32(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 1)
166 // CHECK-NEXT: ret <8 x i16> [[TMP0]]
167 //
test_vqmovuntq_s32(uint16x8_t a,int32x4_t b)168 uint16x8_t test_vqmovuntq_s32(uint16x8_t a, int32x4_t b)
169 {
170 #ifdef POLYMORPHIC
171 return vqmovuntq(a, b);
172 #else /* POLYMORPHIC */
173 return vqmovuntq_s32(a, b);
174 #endif /* POLYMORPHIC */
175 }
176
177 // CHECK-LABEL: @test_vqmovnbq_m_s16(
178 // CHECK-NEXT: entry:
179 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
180 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
181 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 0, <8 x i1> [[TMP1]])
182 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
183 //
test_vqmovnbq_m_s16(int8x16_t a,int16x8_t b,mve_pred16_t p)184 int8x16_t test_vqmovnbq_m_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)
185 {
186 #ifdef POLYMORPHIC
187 return vqmovnbq_m(a, b, p);
188 #else /* POLYMORPHIC */
189 return vqmovnbq_m_s16(a, b, p);
190 #endif /* POLYMORPHIC */
191 }
192
193 // CHECK-LABEL: @test_vqmovnbq_m_s32(
194 // CHECK-NEXT: entry:
195 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
196 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
197 // CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 0, <4 x i1> [[TMP1]])
198 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
199 //
test_vqmovnbq_m_s32(int16x8_t a,int32x4_t b,mve_pred16_t p)200 int16x8_t test_vqmovnbq_m_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)
201 {
202 #ifdef POLYMORPHIC
203 return vqmovnbq_m(a, b, p);
204 #else /* POLYMORPHIC */
205 return vqmovnbq_m_s32(a, b, p);
206 #endif /* POLYMORPHIC */
207 }
208
209 // CHECK-LABEL: @test_vqmovnbq_m_u16(
210 // CHECK-NEXT: entry:
211 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
212 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
213 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 0, <8 x i1> [[TMP1]])
214 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
215 //
test_vqmovnbq_m_u16(uint8x16_t a,uint16x8_t b,mve_pred16_t p)216 uint8x16_t test_vqmovnbq_m_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)
217 {
218 #ifdef POLYMORPHIC
219 return vqmovnbq_m(a, b, p);
220 #else /* POLYMORPHIC */
221 return vqmovnbq_m_u16(a, b, p);
222 #endif /* POLYMORPHIC */
223 }
224
225 // CHECK-LABEL: @test_vqmovnbq_m_u32(
226 // CHECK-NEXT: entry:
227 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
228 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
229 // CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 0, <4 x i1> [[TMP1]])
230 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
231 //
test_vqmovnbq_m_u32(uint16x8_t a,uint32x4_t b,mve_pred16_t p)232 uint16x8_t test_vqmovnbq_m_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)
233 {
234 #ifdef POLYMORPHIC
235 return vqmovnbq_m(a, b, p);
236 #else /* POLYMORPHIC */
237 return vqmovnbq_m_u32(a, b, p);
238 #endif /* POLYMORPHIC */
239 }
240
241 // CHECK-LABEL: @test_vqmovntq_m_s16(
242 // CHECK-NEXT: entry:
243 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
244 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
245 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, i32 0, i32 1, <8 x i1> [[TMP1]])
246 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
247 //
test_vqmovntq_m_s16(int8x16_t a,int16x8_t b,mve_pred16_t p)248 int8x16_t test_vqmovntq_m_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)
249 {
250 #ifdef POLYMORPHIC
251 return vqmovntq_m(a, b, p);
252 #else /* POLYMORPHIC */
253 return vqmovntq_m_s16(a, b, p);
254 #endif /* POLYMORPHIC */
255 }
256
257 // CHECK-LABEL: @test_vqmovntq_m_s32(
258 // CHECK-NEXT: entry:
259 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
260 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
261 // CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, i32 0, i32 1, <4 x i1> [[TMP1]])
262 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
263 //
test_vqmovntq_m_s32(int16x8_t a,int32x4_t b,mve_pred16_t p)264 int16x8_t test_vqmovntq_m_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)
265 {
266 #ifdef POLYMORPHIC
267 return vqmovntq_m(a, b, p);
268 #else /* POLYMORPHIC */
269 return vqmovntq_m_s32(a, b, p);
270 #endif /* POLYMORPHIC */
271 }
272
273 // CHECK-LABEL: @test_vqmovntq_m_u16(
274 // CHECK-NEXT: entry:
275 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
276 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
277 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 1, i32 1, <8 x i1> [[TMP1]])
278 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
279 //
test_vqmovntq_m_u16(uint8x16_t a,uint16x8_t b,mve_pred16_t p)280 uint8x16_t test_vqmovntq_m_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)
281 {
282 #ifdef POLYMORPHIC
283 return vqmovntq_m(a, b, p);
284 #else /* POLYMORPHIC */
285 return vqmovntq_m_u16(a, b, p);
286 #endif /* POLYMORPHIC */
287 }
288
289 // CHECK-LABEL: @test_vqmovntq_m_u32(
290 // CHECK-NEXT: entry:
291 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
292 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
293 // CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 1, i32 1, <4 x i1> [[TMP1]])
294 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
295 //
test_vqmovntq_m_u32(uint16x8_t a,uint32x4_t b,mve_pred16_t p)296 uint16x8_t test_vqmovntq_m_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)
297 {
298 #ifdef POLYMORPHIC
299 return vqmovntq_m(a, b, p);
300 #else /* POLYMORPHIC */
301 return vqmovntq_m_u32(a, b, p);
302 #endif /* POLYMORPHIC */
303 }
304
305 // CHECK-LABEL: @test_vqmovunbq_m_s16(
306 // CHECK-NEXT: entry:
307 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
308 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
309 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 0, <8 x i1> [[TMP1]])
310 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
311 //
test_vqmovunbq_m_s16(uint8x16_t a,int16x8_t b,mve_pred16_t p)312 uint8x16_t test_vqmovunbq_m_s16(uint8x16_t a, int16x8_t b, mve_pred16_t p)
313 {
314 #ifdef POLYMORPHIC
315 return vqmovunbq_m(a, b, p);
316 #else /* POLYMORPHIC */
317 return vqmovunbq_m_s16(a, b, p);
318 #endif /* POLYMORPHIC */
319 }
320
321 // CHECK-LABEL: @test_vqmovunbq_m_s32(
322 // CHECK-NEXT: entry:
323 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
324 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
325 // CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 0, <4 x i1> [[TMP1]])
326 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
327 //
test_vqmovunbq_m_s32(uint16x8_t a,int32x4_t b,mve_pred16_t p)328 uint16x8_t test_vqmovunbq_m_s32(uint16x8_t a, int32x4_t b, mve_pred16_t p)
329 {
330 #ifdef POLYMORPHIC
331 return vqmovunbq_m(a, b, p);
332 #else /* POLYMORPHIC */
333 return vqmovunbq_m_s32(a, b, p);
334 #endif /* POLYMORPHIC */
335 }
336
337 // CHECK-LABEL: @test_vqmovuntq_m_s16(
338 // CHECK-NEXT: entry:
339 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
340 // CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])
341 // CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vqmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, i32 0, i32 1, <8 x i1> [[TMP1]])
342 // CHECK-NEXT: ret <16 x i8> [[TMP2]]
343 //
test_vqmovuntq_m_s16(uint8x16_t a,int16x8_t b,mve_pred16_t p)344 uint8x16_t test_vqmovuntq_m_s16(uint8x16_t a, int16x8_t b, mve_pred16_t p)
345 {
346 #ifdef POLYMORPHIC
347 return vqmovuntq_m(a, b, p);
348 #else /* POLYMORPHIC */
349 return vqmovuntq_m_s16(a, b, p);
350 #endif /* POLYMORPHIC */
351 }
352
353 // CHECK-LABEL: @test_vqmovuntq_m_s32(
354 // CHECK-NEXT: entry:
355 // CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32
356 // CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])
357 // CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vqmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, i32 0, i32 1, <4 x i1> [[TMP1]])
358 // CHECK-NEXT: ret <8 x i16> [[TMP2]]
359 //
test_vqmovuntq_m_s32(uint16x8_t a,int32x4_t b,mve_pred16_t p)360 uint16x8_t test_vqmovuntq_m_s32(uint16x8_t a, int32x4_t b, mve_pred16_t p)
361 {
362 #ifdef POLYMORPHIC
363 return vqmovuntq_m(a, b, p);
364 #else /* POLYMORPHIC */
365 return vqmovuntq_m_s32(a, b, p);
366 #endif /* POLYMORPHIC */
367 }
368
369