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