1 // REQUIRES: aarch64-registered-target
2 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +neon \
3 // RUN:   -ffp-contract=fast -S -O3 -o - %s | FileCheck %s
4 
5 // Test new aarch64 intrinsics and types
6 
7 #include <arm_neon.h>
8 
9 int8x8_t test_vtbl1_s8(int8x8_t a, int8x8_t b) {
10   // CHECK: test_vtbl1_s8
11   return vtbl1_s8(a, b);
12   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
13 }
14 
15 int8x8_t test_vqtbl1_s8(int8x16_t a, int8x8_t b) {
16   // CHECK: test_vqtbl1_s8
17   return vqtbl1_s8(a, b);
18   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
19 }
20 
21 int8x8_t test_vtbl2_s8(int8x8x2_t a, int8x8_t b) {
22   // CHECK: test_vtbl2_s8
23   return vtbl2_s8(a, b);
24   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
25 }
26 
27 int8x8_t test_vqtbl2_s8(int8x16x2_t a, int8x8_t b) {
28   // CHECK: test_vqtbl2_s8
29   return vqtbl2_s8(a, b);
30   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
31 }
32 
33 int8x8_t test_vtbl3_s8(int8x8x3_t a, int8x8_t b) {
34   // CHECK: test_vtbl3_s8
35   return vtbl3_s8(a, b);
36   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
37 }
38 
39 int8x8_t test_vqtbl3_s8(int8x16x3_t a, int8x8_t b) {
40   // CHECK: test_vqtbl3_s8
41   return vqtbl3_s8(a, b);
42   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
43 }
44 
45 int8x8_t test_vtbl4_s8(int8x8x4_t a, int8x8_t b) {
46   // CHECK: test_vtbl4_s8
47   return vtbl4_s8(a, b);
48   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
49 }
50 
51 int8x8_t test_vqtbl4_s8(int8x16x4_t a, int8x8_t b) {
52   // CHECK: test_vqtbl4_s8
53   return vqtbl4_s8(a, b);
54   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
55 }
56 
57 int8x16_t test_vqtbl1q_s8(int8x16_t a, int8x16_t b) {
58   // CHECK: test_vqtbl1q_s8
59   return vqtbl1q_s8(a, b);
60   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
61 }
62 
63 int8x16_t test_vqtbl2q_s8(int8x16x2_t a, int8x16_t b) {
64   // CHECK: test_vqtbl2q_s8
65   return vqtbl2q_s8(a, b);
66   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
67 }
68 
69 int8x16_t test_vqtbl3q_s8(int8x16x3_t a, int8x16_t b) {
70   // CHECK: test_vqtbl3q_s8
71   return vqtbl3q_s8(a, b);
72   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
73 }
74 
75 int8x16_t test_vqtbl4q_s8(int8x16x4_t a, int8x16_t b) {
76   // CHECK: test_vqtbl4q_s8
77   return vqtbl4q_s8(a, b);
78   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
79 }
80 
81 int8x8_t test_vtbx1_s8(int8x8_t a, int8x8_t b, int8x8_t c) {
82   // CHECK: test_vtbx1_s8
83   return vtbx1_s8(a, b, c);
84   // CHECK: movi {{v[0-9]+}}.8b, #0
85   // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
86   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
87   // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
88   // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
89 }
90 
91 int8x8_t test_vtbx2_s8(int8x8_t a, int8x8x2_t b, int8x8_t c) {
92   // CHECK: test_vtbx2_s8
93   return vtbx2_s8(a, b, c);
94   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
95 }
96 
97 int8x8_t test_vtbx3_s8(int8x8_t a, int8x8x3_t b, int8x8_t c) {
98   // CHECK: test_vtbx3_s8
99   return vtbx3_s8(a, b, c);
100   // CHECK: movi {{v[0-9]+}}.8b, #0
101   // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
102   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
103   // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
104   // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
105 }
106 
107 int8x8_t test_vtbx4_s8(int8x8_t a, int8x8x4_t b, int8x8_t c) {
108   // CHECK: test_vtbx4_s8
109   return vtbx4_s8(a, b, c);
110   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
111 }
112 
113 int8x8_t test_vqtbx1_s8(int8x8_t a, int8x16_t b, int8x8_t c) {
114   // CHECK: test_vqtbx1_s8
115   return vqtbx1_s8(a, b, c);
116   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
117 }
118 
119 int8x8_t test_vqtbx2_s8(int8x8_t a, int8x16x2_t b, int8x8_t c) {
120   // CHECK: test_vqtbx2_s8
121   return vqtbx2_s8(a, b, c);
122   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
123 }
124 
125 int8x8_t test_vqtbx3_s8(int8x8_t a, int8x16x3_t b, int8x8_t c) {
126   // CHECK: test_vqtbx3_s8
127   return vqtbx3_s8(a, b, c);
128   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
129 }
130 
131 int8x8_t test_vqtbx4_s8(int8x8_t a, int8x16x4_t b, int8x8_t c) {
132   // CHECK: test_vqtbx4_s8
133   return vqtbx4_s8(a, b, c);
134   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
135 }
136 
137 int8x16_t test_vqtbx1q_s8(int8x16_t a, int8x16_t b, int8x16_t c) {
138   // CHECK: test_vqtbx1q_s8
139   return vqtbx1q_s8(a, b, c);
140   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
141 }
142 
143 int8x16_t test_vqtbx2q_s8(int8x16_t a, int8x16x2_t b, int8x16_t c) {
144   // CHECK: test_vqtbx2q_s8
145   return vqtbx2q_s8(a, b, c);
146   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
147 }
148 
149 int8x16_t test_vqtbx3q_s8(int8x16_t a, int8x16x3_t b, int8x16_t c) {
150   // CHECK: test_vqtbx3q_s8
151   return vqtbx3q_s8(a, b, c);
152   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
153 }
154 
155 int8x16_t test_vqtbx4q_s8(int8x16_t a, int8x16x4_t b, int8x16_t c) {
156   // CHECK: test_vqtbx4q_s8
157   return vqtbx4q_s8(a, b, c);
158   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
159 }
160 
161 uint8x8_t test_vtbl1_u8(uint8x8_t a, uint8x8_t b) {
162   // CHECK: test_vtbl1_u8
163   return vtbl1_u8(a, b);
164   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
165 }
166 
167 uint8x8_t test_vqtbl1_u8(uint8x16_t a, uint8x8_t b) {
168   // CHECK: test_vqtbl1_u8
169   return vqtbl1_u8(a, b);
170   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
171 }
172 
173 uint8x8_t test_vtbl2_u8(uint8x8x2_t a, uint8x8_t b) {
174   // CHECK: test_vtbl2_u8
175   return vtbl2_u8(a, b);
176   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
177 }
178 
179 uint8x8_t test_vqtbl2_u8(uint8x16x2_t a, uint8x8_t b) {
180   // CHECK: test_vqtbl2_u8
181   return vqtbl2_u8(a, b);
182   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
183 }
184 
185 uint8x8_t test_vtbl3_u8(uint8x8x3_t a, uint8x8_t b) {
186   // CHECK: test_vtbl3_u8
187   return vtbl3_u8(a, b);
188   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
189 }
190 
191 uint8x8_t test_vqtbl3_u8(uint8x16x3_t a, uint8x8_t b) {
192   // CHECK: test_vqtbl3_u8
193   return vqtbl3_u8(a, b);
194   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
195 }
196 
197 uint8x8_t test_vtbl4_u8(uint8x8x4_t a, uint8x8_t b) {
198   // CHECK: test_vtbl4_u8
199   return vtbl4_u8(a, b);
200   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
201 }
202 
203 uint8x8_t test_vqtbl4_u8(uint8x16x4_t a, uint8x8_t b) {
204   // CHECK: test_vqtbl4_u8
205   return vqtbl4_u8(a, b);
206   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
207 }
208 
209 uint8x16_t test_vqtbl1q_u8(uint8x16_t a, uint8x16_t b) {
210   // CHECK: test_vqtbl1q_u8
211   return vqtbl1q_u8(a, b);
212   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
213 }
214 
215 uint8x16_t test_vqtbl2q_u8(uint8x16x2_t a, uint8x16_t b) {
216   // CHECK: test_vqtbl2q_u8
217   return vqtbl2q_u8(a, b);
218   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
219 }
220 
221 uint8x16_t test_vqtbl3q_u8(uint8x16x3_t a, uint8x16_t b) {
222   // CHECK: test_vqtbl3q_u8
223   return vqtbl3q_u8(a, b);
224   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
225 }
226 
227 uint8x16_t test_vqtbl4q_u8(uint8x16x4_t a, uint8x16_t b) {
228   // CHECK: test_vqtbl4q_u8
229   return vqtbl4q_u8(a, b);
230   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
231 }
232 
233 uint8x8_t test_vtbx1_u8(uint8x8_t a, uint8x8_t b, uint8x8_t c) {
234   // CHECK: test_vtbx1_u8
235   return vtbx1_u8(a, b, c);
236   // CHECK: movi {{v[0-9]+}}.8b, #0
237   // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
238   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
239   // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
240   // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
241 }
242 
243 uint8x8_t test_vtbx2_u8(uint8x8_t a, uint8x8x2_t b, uint8x8_t c) {
244   // CHECK: test_vtbx2_u8
245   return vtbx2_u8(a, b, c);
246   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
247 }
248 
249 uint8x8_t test_vtbx3_u8(uint8x8_t a, uint8x8x3_t b, uint8x8_t c) {
250   // CHECK: test_vtbx3_u8
251   return vtbx3_u8(a, b, c);
252   // CHECK: movi {{v[0-9]+}}.8b, #0
253   // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
254   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
255   // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
256   // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
257 }
258 
259 uint8x8_t test_vtbx4_u8(uint8x8_t a, uint8x8x4_t b, uint8x8_t c) {
260   // CHECK: test_vtbx4_u8
261   return vtbx4_u8(a, b, c);
262   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
263 }
264 
265 uint8x8_t test_vqtbx1_u8(uint8x8_t a, uint8x16_t b, uint8x8_t c) {
266   // CHECK: test_vqtbx1_u8
267   return vqtbx1_u8(a, b, c);
268   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
269 }
270 
271 uint8x8_t test_vqtbx2_u8(uint8x8_t a, uint8x16x2_t b, uint8x8_t c) {
272   // CHECK: test_vqtbx2_u8
273   return vqtbx2_u8(a, b, c);
274   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
275 }
276 
277 uint8x8_t test_vqtbx3_u8(uint8x8_t a, uint8x16x3_t b, uint8x8_t c) {
278   // CHECK: test_vqtbx3_u8
279   return vqtbx3_u8(a, b, c);
280   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
281 }
282 
283 uint8x8_t test_vqtbx4_u8(uint8x8_t a, uint8x16x4_t b, uint8x8_t c) {
284   // CHECK: test_vqtbx4_u8
285   return vqtbx4_u8(a, b, c);
286   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
287 }
288 
289 uint8x16_t test_vqtbx1q_u8(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
290   // CHECK: test_vqtbx1q_u8
291   return vqtbx1q_u8(a, b, c);
292   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
293 }
294 
295 uint8x16_t test_vqtbx2q_u8(uint8x16_t a, uint8x16x2_t b, uint8x16_t c) {
296   // CHECK: test_vqtbx2q_u8
297   return vqtbx2q_u8(a, b, c);
298   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
299 }
300 
301 uint8x16_t test_vqtbx3q_u8(uint8x16_t a, uint8x16x3_t b, uint8x16_t c) {
302   // CHECK: test_vqtbx3q_u8
303   return vqtbx3q_u8(a, b, c);
304   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
305 }
306 
307 uint8x16_t test_vqtbx4q_u8(uint8x16_t a, uint8x16x4_t b, uint8x16_t c) {
308   // CHECK: test_vqtbx4q_u8
309   return vqtbx4q_u8(a, b, c);
310   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
311 }
312 
313 poly8x8_t test_vtbl1_p8(poly8x8_t a, uint8x8_t b) {
314   // CHECK: test_vtbl1_p8
315   return vtbl1_p8(a, b);
316   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
317 }
318 
319 poly8x8_t test_vqtbl1_p8(poly8x16_t a, uint8x8_t b) {
320   // CHECK: test_vqtbl1_p8
321   return vqtbl1_p8(a, b);
322   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
323 }
324 
325 poly8x8_t test_vtbl2_p8(poly8x8x2_t a, uint8x8_t b) {
326   // CHECK: test_vtbl2_p8
327   return vtbl2_p8(a, b);
328   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
329 }
330 
331 poly8x8_t test_vqtbl2_p8(poly8x16x2_t a, uint8x8_t b) {
332   // CHECK: test_vqtbl2_p8
333   return vqtbl2_p8(a, b);
334   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
335 }
336 
337 poly8x8_t test_vtbl3_p8(poly8x8x3_t a, uint8x8_t b) {
338   // CHECK: test_vtbl3_p8
339   return vtbl3_p8(a, b);
340   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
341 }
342 
343 poly8x8_t test_vqtbl3_p8(poly8x16x3_t a, uint8x8_t b) {
344   // CHECK: test_vqtbl3_p8
345   return vqtbl3_p8(a, b);
346   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
347 }
348 
349 poly8x8_t test_vtbl4_p8(poly8x8x4_t a, uint8x8_t b) {
350   // CHECK: test_vtbl4_p8
351   return vtbl4_p8(a, b);
352   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
353 }
354 
355 poly8x8_t test_vqtbl4_p8(poly8x16x4_t a, uint8x8_t b) {
356   // CHECK: test_vqtbl4_p8
357   return vqtbl4_p8(a, b);
358   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
359 }
360 
361 poly8x16_t test_vqtbl1q_p8(poly8x16_t a, uint8x16_t b) {
362   // CHECK: test_vqtbl1q_p8
363   return vqtbl1q_p8(a, b);
364   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
365 }
366 
367 poly8x16_t test_vqtbl2q_p8(poly8x16x2_t a, uint8x16_t b) {
368   // CHECK: test_vqtbl2q_p8
369   return vqtbl2q_p8(a, b);
370   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
371 }
372 
373 poly8x16_t test_vqtbl3q_p8(poly8x16x3_t a, uint8x16_t b) {
374   // CHECK: test_vqtbl3q_p8
375   return vqtbl3q_p8(a, b);
376   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
377 }
378 
379 poly8x16_t test_vqtbl4q_p8(poly8x16x4_t a, uint8x16_t b) {
380   // CHECK: test_vqtbl4q_p8
381   return vqtbl4q_p8(a, b);
382   // CHECK: tbl {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
383 }
384 
385 poly8x8_t test_vtbx1_p8(poly8x8_t a, poly8x8_t b, uint8x8_t c) {
386   // CHECK: test_vtbx1_p8
387   return vtbx1_p8(a, b, c);
388   // CHECK: movi {{v[0-9]+}}.8b, #0
389   // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
390   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
391   // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
392   // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
393 }
394 
395 poly8x8_t test_vtbx2_p8(poly8x8_t a, poly8x8x2_t b, uint8x8_t c) {
396   // CHECK: test_vtbx2_p8
397   return vtbx2_p8(a, b, c);
398   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
399 }
400 
401 poly8x8_t test_vtbx3_p8(poly8x8_t a, poly8x8x3_t b, uint8x8_t c) {
402   // CHECK: test_vtbx3_p8
403   return vtbx3_p8(a, b, c);
404   // CHECK: movi {{v[0-9]+}}.8b, #0
405   // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
406   // CHECK: tbl {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
407   // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
408   // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
409 }
410 
411 poly8x8_t test_vtbx4_p8(poly8x8_t a, poly8x8x4_t b, uint8x8_t c) {
412   // CHECK: test_vtbx4_p8
413   return vtbx4_p8(a, b, c);
414   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
415 }
416 
417 poly8x8_t test_vqtbx1_p8(poly8x8_t a, uint8x16_t b, uint8x8_t c) {
418   // CHECK: test_vqtbx1_p8
419   return vqtbx1_p8(a, b, c);
420   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
421 }
422 
423 poly8x8_t test_vqtbx2_p8(poly8x8_t a, poly8x16x2_t b, uint8x8_t c) {
424   // CHECK: test_vqtbx2_p8
425   return vqtbx2_p8(a, b, c);
426   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
427 }
428 
429 poly8x8_t test_vqtbx3_p8(poly8x8_t a, poly8x16x3_t b, uint8x8_t c) {
430   // CHECK: test_vqtbx3_p8
431   return vqtbx3_p8(a, b, c);
432   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
433 }
434 
435 poly8x8_t test_vqtbx4_p8(poly8x8_t a, poly8x16x4_t b, uint8x8_t c) {
436   // CHECK: test_vqtbx4_p8
437   return vqtbx4_p8(a, b, c);
438   // CHECK: tbx {{v[0-9]+}}.8b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.8b
439 }
440 
441 poly8x16_t test_vqtbx1q_p8(poly8x16_t a, uint8x16_t b, uint8x16_t c) {
442   // CHECK: test_vqtbx1q_p8
443   return vqtbx1q_p8(a, b, c);
444   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
445 }
446 
447 poly8x16_t test_vqtbx2q_p8(poly8x16_t a, poly8x16x2_t b, uint8x16_t c) {
448   // CHECK: test_vqtbx2q_p8
449   return vqtbx2q_p8(a, b, c);
450   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
451 }
452 
453 poly8x16_t test_vqtbx3q_p8(poly8x16_t a, poly8x16x3_t b, uint8x16_t c) {
454   // CHECK: test_vqtbx3q_p8
455   return vqtbx3q_p8(a, b, c);
456   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
457 }
458 
459 poly8x16_t test_vqtbx4q_p8(poly8x16_t a, poly8x16x4_t b, uint8x16_t c) {
460   // CHECK: test_vqtbx4q_p8
461   return vqtbx4q_p8(a, b, c);
462   // CHECK: tbx {{v[0-9]+}}.16b, {{{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b}, {{v[0-9]+}}.16b
463 }
464