• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  
test_vtbl1_s8(int8x8_t a,int8x8_t b)9  int8x8_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  
test_vqtbl1_s8(int8x16_t a,int8x8_t b)15  int8x8_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  
test_vtbl2_s8(int8x8x2_t a,int8x8_t b)21  int8x8_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  
test_vqtbl2_s8(int8x16x2_t a,int8x8_t b)27  int8x8_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  
test_vtbl3_s8(int8x8x3_t a,int8x8_t b)33  int8x8_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  
test_vqtbl3_s8(int8x16x3_t a,int8x8_t b)39  int8x8_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  
test_vtbl4_s8(int8x8x4_t a,int8x8_t b)45  int8x8_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  
test_vqtbl4_s8(int8x16x4_t a,int8x8_t b)51  int8x8_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  
test_vqtbl1q_s8(int8x16_t a,int8x16_t b)57  int8x16_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  
test_vqtbl2q_s8(int8x16x2_t a,int8x16_t b)63  int8x16_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  
test_vqtbl3q_s8(int8x16x3_t a,int8x16_t b)69  int8x16_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  
test_vqtbl4q_s8(int8x16x4_t a,int8x16_t b)75  int8x16_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  
test_vtbx1_s8(int8x8_t a,int8x8_t b,int8x8_t c)81  int8x8_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  
test_vtbx2_s8(int8x8_t a,int8x8x2_t b,int8x8_t c)91  int8x8_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  
test_vtbx3_s8(int8x8_t a,int8x8x3_t b,int8x8_t c)97  int8x8_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  
test_vtbx4_s8(int8x8_t a,int8x8x4_t b,int8x8_t c)107  int8x8_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  
test_vqtbx1_s8(int8x8_t a,int8x16_t b,int8x8_t c)113  int8x8_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  
test_vqtbx2_s8(int8x8_t a,int8x16x2_t b,int8x8_t c)119  int8x8_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  
test_vqtbx3_s8(int8x8_t a,int8x16x3_t b,int8x8_t c)125  int8x8_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  
test_vqtbx4_s8(int8x8_t a,int8x16x4_t b,int8x8_t c)131  int8x8_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  
test_vqtbx1q_s8(int8x16_t a,int8x16_t b,int8x16_t c)137  int8x16_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  
test_vqtbx2q_s8(int8x16_t a,int8x16x2_t b,int8x16_t c)143  int8x16_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  
test_vqtbx3q_s8(int8x16_t a,int8x16x3_t b,int8x16_t c)149  int8x16_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  
test_vqtbx4q_s8(int8x16_t a,int8x16x4_t b,int8x16_t c)155  int8x16_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  
test_vtbl1_u8(uint8x8_t a,uint8x8_t b)161  uint8x8_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  
test_vqtbl1_u8(uint8x16_t a,uint8x8_t b)167  uint8x8_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  
test_vtbl2_u8(uint8x8x2_t a,uint8x8_t b)173  uint8x8_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  
test_vqtbl2_u8(uint8x16x2_t a,uint8x8_t b)179  uint8x8_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  
test_vtbl3_u8(uint8x8x3_t a,uint8x8_t b)185  uint8x8_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  
test_vqtbl3_u8(uint8x16x3_t a,uint8x8_t b)191  uint8x8_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  
test_vtbl4_u8(uint8x8x4_t a,uint8x8_t b)197  uint8x8_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  
test_vqtbl4_u8(uint8x16x4_t a,uint8x8_t b)203  uint8x8_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  
test_vqtbl1q_u8(uint8x16_t a,uint8x16_t b)209  uint8x16_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  
test_vqtbl2q_u8(uint8x16x2_t a,uint8x16_t b)215  uint8x16_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  
test_vqtbl3q_u8(uint8x16x3_t a,uint8x16_t b)221  uint8x16_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  
test_vqtbl4q_u8(uint8x16x4_t a,uint8x16_t b)227  uint8x16_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  
test_vtbx1_u8(uint8x8_t a,uint8x8_t b,uint8x8_t c)233  uint8x8_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  
test_vtbx2_u8(uint8x8_t a,uint8x8x2_t b,uint8x8_t c)243  uint8x8_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  
test_vtbx3_u8(uint8x8_t a,uint8x8x3_t b,uint8x8_t c)249  uint8x8_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  
test_vtbx4_u8(uint8x8_t a,uint8x8x4_t b,uint8x8_t c)259  uint8x8_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  
test_vqtbx1_u8(uint8x8_t a,uint8x16_t b,uint8x8_t c)265  uint8x8_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  
test_vqtbx2_u8(uint8x8_t a,uint8x16x2_t b,uint8x8_t c)271  uint8x8_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  
test_vqtbx3_u8(uint8x8_t a,uint8x16x3_t b,uint8x8_t c)277  uint8x8_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  
test_vqtbx4_u8(uint8x8_t a,uint8x16x4_t b,uint8x8_t c)283  uint8x8_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  
test_vqtbx1q_u8(uint8x16_t a,uint8x16_t b,uint8x16_t c)289  uint8x16_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  
test_vqtbx2q_u8(uint8x16_t a,uint8x16x2_t b,uint8x16_t c)295  uint8x16_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  
test_vqtbx3q_u8(uint8x16_t a,uint8x16x3_t b,uint8x16_t c)301  uint8x16_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  
test_vqtbx4q_u8(uint8x16_t a,uint8x16x4_t b,uint8x16_t c)307  uint8x16_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  
test_vtbl1_p8(poly8x8_t a,uint8x8_t b)313  poly8x8_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  
test_vqtbl1_p8(poly8x16_t a,uint8x8_t b)319  poly8x8_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  
test_vtbl2_p8(poly8x8x2_t a,uint8x8_t b)325  poly8x8_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  
test_vqtbl2_p8(poly8x16x2_t a,uint8x8_t b)331  poly8x8_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  
test_vtbl3_p8(poly8x8x3_t a,uint8x8_t b)337  poly8x8_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  
test_vqtbl3_p8(poly8x16x3_t a,uint8x8_t b)343  poly8x8_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  
test_vtbl4_p8(poly8x8x4_t a,uint8x8_t b)349  poly8x8_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  
test_vqtbl4_p8(poly8x16x4_t a,uint8x8_t b)355  poly8x8_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  
test_vqtbl1q_p8(poly8x16_t a,uint8x16_t b)361  poly8x16_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  
test_vqtbl2q_p8(poly8x16x2_t a,uint8x16_t b)367  poly8x16_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  
test_vqtbl3q_p8(poly8x16x3_t a,uint8x16_t b)373  poly8x16_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  
test_vqtbl4q_p8(poly8x16x4_t a,uint8x16_t b)379  poly8x16_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  
test_vtbx1_p8(poly8x8_t a,poly8x8_t b,uint8x8_t c)385  poly8x8_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  
test_vtbx2_p8(poly8x8_t a,poly8x8x2_t b,uint8x8_t c)395  poly8x8_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  
test_vtbx3_p8(poly8x8_t a,poly8x8x3_t b,uint8x8_t c)401  poly8x8_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  
test_vtbx4_p8(poly8x8_t a,poly8x8x4_t b,uint8x8_t c)411  poly8x8_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  
test_vqtbx1_p8(poly8x8_t a,uint8x16_t b,uint8x8_t c)417  poly8x8_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  
test_vqtbx2_p8(poly8x8_t a,poly8x16x2_t b,uint8x8_t c)423  poly8x8_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  
test_vqtbx3_p8(poly8x8_t a,poly8x16x3_t b,uint8x8_t c)429  poly8x8_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  
test_vqtbx4_p8(poly8x8_t a,poly8x16x4_t b,uint8x8_t c)435  poly8x8_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  
test_vqtbx1q_p8(poly8x16_t a,uint8x16_t b,uint8x16_t c)441  poly8x16_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  
test_vqtbx2q_p8(poly8x16_t a,poly8x16x2_t b,uint8x16_t c)447  poly8x16_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  
test_vqtbx3q_p8(poly8x16_t a,poly8x16x3_t b,uint8x16_t c)453  poly8x16_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  
test_vqtbx4q_p8(poly8x16_t a,poly8x16x4_t b,uint8x16_t c)459  poly8x16_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