1// REQUIRES: aarch64-registered-target
2// RUN: %clang_cc1 -triple arm64-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
9int8x8_t test_vtbl1_s8(int8x8_t a, int8x8_t b) {
10  // CHECK-LABEL: 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
15int8x8_t test_vqtbl1_s8(int8x16_t a, int8x8_t b) {
16  // CHECK-LABEL: 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
21int8x8_t test_vtbl2_s8(int8x8x2_t a, int8x8_t b) {
22  // CHECK-LABEL: 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
27int8x8_t test_vqtbl2_s8(int8x16x2_t a, int8x8_t b) {
28  // CHECK-LABEL: 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
33int8x8_t test_vtbl3_s8(int8x8x3_t a, int8x8_t b) {
34  // CHECK-LABEL: 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
39int8x8_t test_vqtbl3_s8(int8x16x3_t a, int8x8_t b) {
40  // CHECK-LABEL: 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
45int8x8_t test_vtbl4_s8(int8x8x4_t a, int8x8_t b) {
46  // CHECK-LABEL: 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
51int8x8_t test_vqtbl4_s8(int8x16x4_t a, int8x8_t b) {
52  // CHECK-LABEL: 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
57int8x16_t test_vqtbl1q_s8(int8x16_t a, int8x16_t b) {
58  // CHECK-LABEL: 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
63int8x16_t test_vqtbl2q_s8(int8x16x2_t a, int8x16_t b) {
64  // CHECK-LABEL: 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
69int8x16_t test_vqtbl3q_s8(int8x16x3_t a, int8x16_t b) {
70  // CHECK-LABEL: 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
75int8x16_t test_vqtbl4q_s8(int8x16x4_t a, int8x16_t b) {
76  // CHECK-LABEL: 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
81int8x8_t test_vtbx1_s8(int8x8_t a, int8x8_t b, int8x8_t c) {
82  // CHECK-LABEL: test_vtbx1_s8
83  return vtbx1_s8(a, b, c);
84  // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #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
91int8x8_t test_vtbx2_s8(int8x8_t a, int8x8x2_t b, int8x8_t c) {
92  // CHECK-LABEL: 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
97int8x8_t test_vtbx3_s8(int8x8_t a, int8x8x3_t b, int8x8_t c) {
98  // CHECK-LABEL: test_vtbx3_s8
99  return vtbx3_s8(a, b, c);
100  // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #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
107int8x8_t test_vtbx4_s8(int8x8_t a, int8x8x4_t b, int8x8_t c) {
108  // CHECK-LABEL: 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
113int8x8_t test_vqtbx1_s8(int8x8_t a, int8x16_t b, int8x8_t c) {
114  // CHECK-LABEL: 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
119int8x8_t test_vqtbx2_s8(int8x8_t a, int8x16x2_t b, int8x8_t c) {
120  // CHECK-LABEL: 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
125int8x8_t test_vqtbx3_s8(int8x8_t a, int8x16x3_t b, int8x8_t c) {
126  // CHECK-LABEL: 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
131int8x8_t test_vqtbx4_s8(int8x8_t a, int8x16x4_t b, int8x8_t c) {
132  // CHECK-LABEL: 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
137int8x16_t test_vqtbx1q_s8(int8x16_t a, int8x16_t b, int8x16_t c) {
138  // CHECK-LABEL: 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
143int8x16_t test_vqtbx2q_s8(int8x16_t a, int8x16x2_t b, int8x16_t c) {
144  // CHECK-LABEL: 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
149int8x16_t test_vqtbx3q_s8(int8x16_t a, int8x16x3_t b, int8x16_t c) {
150  // CHECK-LABEL: 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
155int8x16_t test_vqtbx4q_s8(int8x16_t a, int8x16x4_t b, int8x16_t c) {
156  // CHECK-LABEL: 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
161uint8x8_t test_vtbl1_u8(uint8x8_t a, uint8x8_t b) {
162  // CHECK-LABEL: 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
167uint8x8_t test_vqtbl1_u8(uint8x16_t a, uint8x8_t b) {
168  // CHECK-LABEL: 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
173uint8x8_t test_vtbl2_u8(uint8x8x2_t a, uint8x8_t b) {
174  // CHECK-LABEL: 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
179uint8x8_t test_vqtbl2_u8(uint8x16x2_t a, uint8x8_t b) {
180  // CHECK-LABEL: 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
185uint8x8_t test_vtbl3_u8(uint8x8x3_t a, uint8x8_t b) {
186  // CHECK-LABEL: 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
191uint8x8_t test_vqtbl3_u8(uint8x16x3_t a, uint8x8_t b) {
192  // CHECK-LABEL: 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
197uint8x8_t test_vtbl4_u8(uint8x8x4_t a, uint8x8_t b) {
198  // CHECK-LABEL: 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
203uint8x8_t test_vqtbl4_u8(uint8x16x4_t a, uint8x8_t b) {
204  // CHECK-LABEL: 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
209uint8x16_t test_vqtbl1q_u8(uint8x16_t a, uint8x16_t b) {
210  // CHECK-LABEL: 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
215uint8x16_t test_vqtbl2q_u8(uint8x16x2_t a, uint8x16_t b) {
216  // CHECK-LABEL: 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
221uint8x16_t test_vqtbl3q_u8(uint8x16x3_t a, uint8x16_t b) {
222  // CHECK-LABEL: 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
227uint8x16_t test_vqtbl4q_u8(uint8x16x4_t a, uint8x16_t b) {
228  // CHECK-LABEL: 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
233uint8x8_t test_vtbx1_u8(uint8x8_t a, uint8x8_t b, uint8x8_t c) {
234  // CHECK-LABEL: test_vtbx1_u8
235  return vtbx1_u8(a, b, c);
236  // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #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
243uint8x8_t test_vtbx2_u8(uint8x8_t a, uint8x8x2_t b, uint8x8_t c) {
244  // CHECK-LABEL: 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
249uint8x8_t test_vtbx3_u8(uint8x8_t a, uint8x8x3_t b, uint8x8_t c) {
250  // CHECK-LABEL: test_vtbx3_u8
251  return vtbx3_u8(a, b, c);
252  // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #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
259uint8x8_t test_vtbx4_u8(uint8x8_t a, uint8x8x4_t b, uint8x8_t c) {
260  // CHECK-LABEL: 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
265uint8x8_t test_vqtbx1_u8(uint8x8_t a, uint8x16_t b, uint8x8_t c) {
266  // CHECK-LABEL: 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
271uint8x8_t test_vqtbx2_u8(uint8x8_t a, uint8x16x2_t b, uint8x8_t c) {
272  // CHECK-LABEL: 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
277uint8x8_t test_vqtbx3_u8(uint8x8_t a, uint8x16x3_t b, uint8x8_t c) {
278  // CHECK-LABEL: 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
283uint8x8_t test_vqtbx4_u8(uint8x8_t a, uint8x16x4_t b, uint8x8_t c) {
284  // CHECK-LABEL: 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
289uint8x16_t test_vqtbx1q_u8(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
290  // CHECK-LABEL: 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
295uint8x16_t test_vqtbx2q_u8(uint8x16_t a, uint8x16x2_t b, uint8x16_t c) {
296  // CHECK-LABEL: 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
301uint8x16_t test_vqtbx3q_u8(uint8x16_t a, uint8x16x3_t b, uint8x16_t c) {
302  // CHECK-LABEL: 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
307uint8x16_t test_vqtbx4q_u8(uint8x16_t a, uint8x16x4_t b, uint8x16_t c) {
308  // CHECK-LABEL: 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
313poly8x8_t test_vtbl1_p8(poly8x8_t a, uint8x8_t b) {
314  // CHECK-LABEL: 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
319poly8x8_t test_vqtbl1_p8(poly8x16_t a, uint8x8_t b) {
320  // CHECK-LABEL: 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
325poly8x8_t test_vtbl2_p8(poly8x8x2_t a, uint8x8_t b) {
326  // CHECK-LABEL: 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
331poly8x8_t test_vqtbl2_p8(poly8x16x2_t a, uint8x8_t b) {
332  // CHECK-LABEL: 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
337poly8x8_t test_vtbl3_p8(poly8x8x3_t a, uint8x8_t b) {
338  // CHECK-LABEL: 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
343poly8x8_t test_vqtbl3_p8(poly8x16x3_t a, uint8x8_t b) {
344  // CHECK-LABEL: 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
349poly8x8_t test_vtbl4_p8(poly8x8x4_t a, uint8x8_t b) {
350  // CHECK-LABEL: 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
355poly8x8_t test_vqtbl4_p8(poly8x16x4_t a, uint8x8_t b) {
356  // CHECK-LABEL: 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
361poly8x16_t test_vqtbl1q_p8(poly8x16_t a, uint8x16_t b) {
362  // CHECK-LABEL: 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
367poly8x16_t test_vqtbl2q_p8(poly8x16x2_t a, uint8x16_t b) {
368  // CHECK-LABEL: 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
373poly8x16_t test_vqtbl3q_p8(poly8x16x3_t a, uint8x16_t b) {
374  // CHECK-LABEL: 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
379poly8x16_t test_vqtbl4q_p8(poly8x16x4_t a, uint8x16_t b) {
380  // CHECK-LABEL: 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
385poly8x8_t test_vtbx1_p8(poly8x8_t a, poly8x8_t b, uint8x8_t c) {
386  // CHECK-LABEL: test_vtbx1_p8
387  return vtbx1_p8(a, b, c);
388  // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #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
395poly8x8_t test_vtbx2_p8(poly8x8_t a, poly8x8x2_t b, uint8x8_t c) {
396  // CHECK-LABEL: 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
401poly8x8_t test_vtbx3_p8(poly8x8_t a, poly8x8x3_t b, uint8x8_t c) {
402  // CHECK-LABEL: test_vtbx3_p8
403  return vtbx3_p8(a, b, c);
404  // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #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
411poly8x8_t test_vtbx4_p8(poly8x8_t a, poly8x8x4_t b, uint8x8_t c) {
412  // CHECK-LABEL: 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
417poly8x8_t test_vqtbx1_p8(poly8x8_t a, uint8x16_t b, uint8x8_t c) {
418  // CHECK-LABEL: 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
423poly8x8_t test_vqtbx2_p8(poly8x8_t a, poly8x16x2_t b, uint8x8_t c) {
424  // CHECK-LABEL: 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
429poly8x8_t test_vqtbx3_p8(poly8x8_t a, poly8x16x3_t b, uint8x8_t c) {
430  // CHECK-LABEL: 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
435poly8x8_t test_vqtbx4_p8(poly8x8_t a, poly8x16x4_t b, uint8x8_t c) {
436  // CHECK-LABEL: 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
441poly8x16_t test_vqtbx1q_p8(poly8x16_t a, uint8x16_t b, uint8x16_t c) {
442  // CHECK-LABEL: 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
447poly8x16_t test_vqtbx2q_p8(poly8x16_t a, poly8x16x2_t b, uint8x16_t c) {
448  // CHECK-LABEL: 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
453poly8x16_t test_vqtbx3q_p8(poly8x16_t a, poly8x16x3_t b, uint8x16_t c) {
454  // CHECK-LABEL: 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
459poly8x16_t test_vqtbx4q_p8(poly8x16_t a, poly8x16x4_t b, uint8x16_t c) {
460  // CHECK-LABEL: 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