Home | History | Annotate | Download | only in CodeGen
      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 #include <arm_neon.h>
      7 
      8 int8x8_t test_vuzp1_s8(int8x8_t a, int8x8_t b) {
      9   // CHECK-LABEL: test_vuzp1_s8
     10   return vuzp1_s8(a, b);
     11   // CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     12 }
     13 
     14 int8x16_t test_vuzp1q_s8(int8x16_t a, int8x16_t b) {
     15   // CHECK-LABEL: test_vuzp1q_s8
     16   return vuzp1q_s8(a, b);
     17   // CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     18 }
     19 
     20 int16x4_t test_vuzp1_s16(int16x4_t a, int16x4_t b) {
     21   // CHECK-LABEL: test_vuzp1_s16
     22   return vuzp1_s16(a, b);
     23   // CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     24 }
     25 
     26 int16x8_t test_vuzp1q_s16(int16x8_t a, int16x8_t b) {
     27   // CHECK-LABEL: test_vuzp1q_s16
     28   return vuzp1q_s16(a, b);
     29   // CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
     30 }
     31 
     32 int32x2_t test_vuzp1_s32(int32x2_t a, int32x2_t b) {
     33   // CHECK-LABEL: test_vuzp1_s32
     34   return vuzp1_s32(a, b);
     35   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
     36 }
     37 
     38 int32x4_t test_vuzp1q_s32(int32x4_t a, int32x4_t b) {
     39   // CHECK-LABEL: test_vuzp1q_s32
     40   return vuzp1q_s32(a, b);
     41   // CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     42 }
     43 
     44 int64x2_t test_vuzp1q_s64(int64x2_t a, int64x2_t b) {
     45   // CHECK-LABEL: test_vuzp1q_s64
     46   return vuzp1q_s64(a, b);
     47   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
     48 }
     49 
     50 uint8x8_t test_vuzp1_u8(uint8x8_t a, uint8x8_t b) {
     51   // CHECK-LABEL: test_vuzp1_u8
     52   return vuzp1_u8(a, b);
     53   // CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     54 }
     55 
     56 uint8x16_t test_vuzp1q_u8(uint8x16_t a, uint8x16_t b) {
     57   // CHECK-LABEL: test_vuzp1q_u8
     58   return vuzp1q_u8(a, b);
     59   // CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     60 }
     61 
     62 uint16x4_t test_vuzp1_u16(uint16x4_t a, uint16x4_t b) {
     63   // CHECK-LABEL: test_vuzp1_u16
     64   return vuzp1_u16(a, b);
     65   // CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     66 }
     67 
     68 uint16x8_t test_vuzp1q_u16(uint16x8_t a, uint16x8_t b) {
     69   // CHECK-LABEL: test_vuzp1q_u16
     70   return vuzp1q_u16(a, b);
     71   // CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
     72 }
     73 
     74 uint32x2_t test_vuzp1_u32(uint32x2_t a, uint32x2_t b) {
     75   // CHECK-LABEL: test_vuzp1_u32
     76   return vuzp1_u32(a, b);
     77   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
     78 }
     79 
     80 uint32x4_t test_vuzp1q_u32(uint32x4_t a, uint32x4_t b) {
     81   // CHECK-LABEL: test_vuzp1q_u32
     82   return vuzp1q_u32(a, b);
     83   // CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     84 }
     85 
     86 uint64x2_t test_vuzp1q_u64(uint64x2_t a, uint64x2_t b) {
     87   // CHECK-LABEL: test_vuzp1q_u64
     88   return vuzp1q_u64(a, b);
     89   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
     90 }
     91 
     92 float32x2_t test_vuzp1_f32(float32x2_t a, float32x2_t b) {
     93   // CHECK-LABEL: test_vuzp1_f32
     94   return vuzp1_f32(a, b);
     95   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
     96 }
     97 
     98 float32x4_t test_vuzp1q_f32(float32x4_t a, float32x4_t b) {
     99   // CHECK-LABEL: test_vuzp1q_f32
    100   return vuzp1q_f32(a, b);
    101   // CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    102 }
    103 
    104 float64x2_t test_vuzp1q_f64(float64x2_t a, float64x2_t b) {
    105   // CHECK-LABEL: test_vuzp1q_f64
    106   return vuzp1q_f64(a, b);
    107   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
    108 }
    109 
    110 poly8x8_t test_vuzp1_p8(poly8x8_t a, poly8x8_t b) {
    111   // CHECK-LABEL: test_vuzp1_p8
    112   return vuzp1_p8(a, b);
    113   // CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    114 }
    115 
    116 poly8x16_t test_vuzp1q_p8(poly8x16_t a, poly8x16_t b) {
    117   // CHECK-LABEL: test_vuzp1q_p8
    118   return vuzp1q_p8(a, b);
    119   // CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    120 }
    121 
    122 poly16x4_t test_vuzp1_p16(poly16x4_t a, poly16x4_t b) {
    123   // CHECK-LABEL: test_vuzp1_p16
    124   return vuzp1_p16(a, b);
    125   // CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    126 }
    127 
    128 poly16x8_t test_vuzp1q_p16(poly16x8_t a, poly16x8_t b) {
    129   // CHECK-LABEL: test_vuzp1q_p16
    130   return vuzp1q_p16(a, b);
    131   // CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    132 }
    133 
    134 int8x8_t test_vuzp2_s8(int8x8_t a, int8x8_t b) {
    135   // CHECK-LABEL: test_vuzp2_s8
    136   return vuzp2_s8(a, b);
    137   // CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    138 }
    139 
    140 int8x16_t test_vuzp2q_s8(int8x16_t a, int8x16_t b) {
    141   // CHECK-LABEL: test_vuzp2q_s8
    142   return vuzp2q_s8(a, b);
    143   // CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    144 }
    145 
    146 int16x4_t test_vuzp2_s16(int16x4_t a, int16x4_t b) {
    147   // CHECK-LABEL: test_vuzp2_s16
    148   return vuzp2_s16(a, b);
    149   // CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    150 }
    151 
    152 int16x8_t test_vuzp2q_s16(int16x8_t a, int16x8_t b) {
    153   // CHECK-LABEL: test_vuzp2q_s16
    154   return vuzp2q_s16(a, b);
    155   // CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    156 }
    157 
    158 int32x2_t test_vuzp2_s32(int32x2_t a, int32x2_t b) {
    159   // CHECK-LABEL: test_vuzp2_s32
    160   return vuzp2_s32(a, b);
    161   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    162 }
    163 
    164 int32x4_t test_vuzp2q_s32(int32x4_t a, int32x4_t b) {
    165   // CHECK-LABEL: test_vuzp2q_s32
    166   return vuzp2q_s32(a, b);
    167   // CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    168 }
    169 
    170 int64x2_t test_vuzp2q_s64(int64x2_t a, int64x2_t b) {
    171   // CHECK-LABEL: test_vuzp2q_s64
    172   return vuzp2q_s64(a, b);
    173   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    174 }
    175 
    176 uint8x8_t test_vuzp2_u8(uint8x8_t a, uint8x8_t b) {
    177   // CHECK-LABEL: test_vuzp2_u8
    178   return vuzp2_u8(a, b);
    179   // CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    180 }
    181 
    182 uint8x16_t test_vuzp2q_u8(uint8x16_t a, uint8x16_t b) {
    183   // CHECK-LABEL: test_vuzp2q_u8
    184   return vuzp2q_u8(a, b);
    185   // CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    186 }
    187 
    188 uint16x4_t test_vuzp2_u16(uint16x4_t a, uint16x4_t b) {
    189   // CHECK-LABEL: test_vuzp2_u16
    190   return vuzp2_u16(a, b);
    191   // CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    192 }
    193 
    194 uint16x8_t test_vuzp2q_u16(uint16x8_t a, uint16x8_t b) {
    195   // CHECK-LABEL: test_vuzp2q_u16
    196   return vuzp2q_u16(a, b);
    197   // CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    198 }
    199 
    200 uint32x2_t test_vuzp2_u32(uint32x2_t a, uint32x2_t b) {
    201   // CHECK-LABEL: test_vuzp2_u32
    202   return vuzp2_u32(a, b);
    203   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    204 }
    205 
    206 uint32x4_t test_vuzp2q_u32(uint32x4_t a, uint32x4_t b) {
    207   // CHECK-LABEL: test_vuzp2q_u32
    208   return vuzp2q_u32(a, b);
    209   // CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    210 }
    211 
    212 uint64x2_t test_vuzp2q_u64(uint64x2_t a, uint64x2_t b) {
    213   // CHECK-LABEL: test_vuzp2q_u64
    214   return vuzp2q_u64(a, b);
    215   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    216 }
    217 
    218 float32x2_t test_vuzp2_f32(float32x2_t a, float32x2_t b) {
    219   // CHECK-LABEL: test_vuzp2_f32
    220   return vuzp2_f32(a, b);
    221   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    222 }
    223 
    224 float32x4_t test_vuzp2q_f32(float32x4_t a, float32x4_t b) {
    225   // CHECK-LABEL: test_vuzp2q_f32
    226   return vuzp2q_f32(a, b);
    227   // CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    228 }
    229 
    230 float64x2_t test_vuzp2q_f64(float64x2_t a, float64x2_t b) {
    231   // CHECK-LABEL: test_vuzp2q_f64
    232   return vuzp2q_f64(a, b);
    233   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    234 }
    235 
    236 poly8x8_t test_vuzp2_p8(poly8x8_t a, poly8x8_t b) {
    237   // CHECK-LABEL: test_vuzp2_p8
    238   return vuzp2_p8(a, b);
    239   // CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    240 }
    241 
    242 poly8x16_t test_vuzp2q_p8(poly8x16_t a, poly8x16_t b) {
    243   // CHECK-LABEL: test_vuzp2q_p8
    244   return vuzp2q_p8(a, b);
    245   // CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    246 }
    247 
    248 poly16x4_t test_vuzp2_p16(poly16x4_t a, poly16x4_t b) {
    249   // CHECK-LABEL: test_vuzp2_p16
    250   return vuzp2_p16(a, b);
    251   // CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    252 }
    253 
    254 poly16x8_t test_vuzp2q_p16(poly16x8_t a, poly16x8_t b) {
    255   // CHECK-LABEL: test_vuzp2q_p16
    256   return vuzp2q_p16(a, b);
    257   // CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    258 }
    259 
    260 int8x8_t test_vzip1_s8(int8x8_t a, int8x8_t b) {
    261   // CHECK-LABEL: test_vzip1_s8
    262   return vzip1_s8(a, b);
    263   // CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    264 }
    265 
    266 int8x16_t test_vzip1q_s8(int8x16_t a, int8x16_t b) {
    267   // CHECK-LABEL: test_vzip1q_s8
    268   return vzip1q_s8(a, b);
    269   // CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    270 }
    271 
    272 int16x4_t test_vzip1_s16(int16x4_t a, int16x4_t b) {
    273   // CHECK-LABEL: test_vzip1_s16
    274   return vzip1_s16(a, b);
    275   // CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    276 }
    277 
    278 int16x8_t test_vzip1q_s16(int16x8_t a, int16x8_t b) {
    279   // CHECK-LABEL: test_vzip1q_s16
    280   return vzip1q_s16(a, b);
    281   // CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    282 }
    283 
    284 int32x2_t test_vzip1_s32(int32x2_t a, int32x2_t b) {
    285   // CHECK-LABEL: test_vzip1_s32
    286   return vzip1_s32(a, b);
    287   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
    288 }
    289 
    290 int32x4_t test_vzip1q_s32(int32x4_t a, int32x4_t b) {
    291   // CHECK-LABEL: test_vzip1q_s32
    292   return vzip1q_s32(a, b);
    293   // CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    294 }
    295 
    296 int64x2_t test_vzip1q_s64(int64x2_t a, int64x2_t b) {
    297   // CHECK-LABEL: test_vzip1q_s64
    298   return vzip1q_s64(a, b);
    299   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
    300 }
    301 
    302 uint8x8_t test_vzip1_u8(uint8x8_t a, uint8x8_t b) {
    303   // CHECK-LABEL: test_vzip1_u8
    304   return vzip1_u8(a, b);
    305   // CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    306 }
    307 
    308 uint8x16_t test_vzip1q_u8(uint8x16_t a, uint8x16_t b) {
    309   // CHECK-LABEL: test_vzip1q_u8
    310   return vzip1q_u8(a, b);
    311   // CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    312 }
    313 
    314 uint16x4_t test_vzip1_u16(uint16x4_t a, uint16x4_t b) {
    315   // CHECK-LABEL: test_vzip1_u16
    316   return vzip1_u16(a, b);
    317   // CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    318 }
    319 
    320 uint16x8_t test_vzip1q_u16(uint16x8_t a, uint16x8_t b) {
    321   // CHECK-LABEL: test_vzip1q_u16
    322   return vzip1q_u16(a, b);
    323   // CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    324 }
    325 
    326 uint32x2_t test_vzip1_u32(uint32x2_t a, uint32x2_t b) {
    327   // CHECK-LABEL: test_vzip1_u32
    328   return vzip1_u32(a, b);
    329   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
    330 }
    331 
    332 uint32x4_t test_vzip1q_u32(uint32x4_t a, uint32x4_t b) {
    333   // CHECK-LABEL: test_vzip1q_u32
    334   return vzip1q_u32(a, b);
    335   // CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    336 }
    337 
    338 uint64x2_t test_vzip1q_u64(uint64x2_t a, uint64x2_t b) {
    339   // CHECK-LABEL: test_vzip1q_u64
    340   return vzip1q_u64(a, b);
    341   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
    342 }
    343 
    344 float32x2_t test_vzip1_f32(float32x2_t a, float32x2_t b) {
    345   // CHECK-LABEL: test_vzip1_f32
    346   return vzip1_f32(a, b);
    347   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
    348 }
    349 
    350 float32x4_t test_vzip1q_f32(float32x4_t a, float32x4_t b) {
    351   // CHECK-LABEL: test_vzip1q_f32
    352   return vzip1q_f32(a, b);
    353   // CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    354 }
    355 
    356 float64x2_t test_vzip1q_f64(float64x2_t a, float64x2_t b) {
    357   // CHECK-LABEL: test_vzip1q_f64
    358   return vzip1q_f64(a, b);
    359   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
    360 }
    361 
    362 poly8x8_t test_vzip1_p8(poly8x8_t a, poly8x8_t b) {
    363   // CHECK-LABEL: test_vzip1_p8
    364   return vzip1_p8(a, b);
    365   // CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    366 }
    367 
    368 poly8x16_t test_vzip1q_p8(poly8x16_t a, poly8x16_t b) {
    369   // CHECK-LABEL: test_vzip1q_p8
    370   return vzip1q_p8(a, b);
    371   // CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    372 }
    373 
    374 poly16x4_t test_vzip1_p16(poly16x4_t a, poly16x4_t b) {
    375   // CHECK-LABEL: test_vzip1_p16
    376   return vzip1_p16(a, b);
    377   // CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    378 }
    379 
    380 poly16x8_t test_vzip1q_p16(poly16x8_t a, poly16x8_t b) {
    381   // CHECK-LABEL: test_vzip1q_p16
    382   return vzip1q_p16(a, b);
    383   // CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    384 }
    385 
    386 int8x8_t test_vzip2_s8(int8x8_t a, int8x8_t b) {
    387   // CHECK-LABEL: test_vzip2_s8
    388   return vzip2_s8(a, b);
    389   // CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    390 }
    391 
    392 int8x16_t test_vzip2q_s8(int8x16_t a, int8x16_t b) {
    393   // CHECK-LABEL: test_vzip2q_s8
    394   return vzip2q_s8(a, b);
    395   // CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    396 }
    397 
    398 int16x4_t test_vzip2_s16(int16x4_t a, int16x4_t b) {
    399   // CHECK-LABEL: test_vzip2_s16
    400   return vzip2_s16(a, b);
    401   // CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    402 }
    403 
    404 int16x8_t test_vzip2q_s16(int16x8_t a, int16x8_t b) {
    405   // CHECK-LABEL: test_vzip2q_s16
    406   return vzip2q_s16(a, b);
    407   // CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    408 }
    409 
    410 int32x2_t test_vzip2_s32(int32x2_t a, int32x2_t b) {
    411   // CHECK-LABEL: test_vzip2_s32
    412   return vzip2_s32(a, b);
    413   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    414 }
    415 
    416 int32x4_t test_vzip2q_s32(int32x4_t a, int32x4_t b) {
    417   // CHECK-LABEL: test_vzip2q_s32
    418   return vzip2q_s32(a, b);
    419   // CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    420 }
    421 
    422 int64x2_t test_vzip2q_s64(int64x2_t a, int64x2_t b) {
    423   // CHECK-LABEL: test_vzip2q_s64
    424   return vzip2q_s64(a, b);
    425   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    426 }
    427 
    428 uint8x8_t test_vzip2_u8(uint8x8_t a, uint8x8_t b) {
    429   // CHECK-LABEL: test_vzip2_u8
    430   return vzip2_u8(a, b);
    431   // CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    432 }
    433 
    434 uint8x16_t test_vzip2q_u8(uint8x16_t a, uint8x16_t b) {
    435   // CHECK-LABEL: test_vzip2q_u8
    436   return vzip2q_u8(a, b);
    437   // CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    438 }
    439 
    440 uint16x4_t test_vzip2_u16(uint16x4_t a, uint16x4_t b) {
    441   // CHECK-LABEL: test_vzip2_u16
    442   return vzip2_u16(a, b);
    443   // CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    444 }
    445 
    446 uint16x8_t test_vzip2q_u16(uint16x8_t a, uint16x8_t b) {
    447   // CHECK-LABEL: test_vzip2q_u16
    448   return vzip2q_u16(a, b);
    449   // CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    450 }
    451 
    452 uint32x2_t test_vzip2_u32(uint32x2_t a, uint32x2_t b) {
    453   // CHECK-LABEL: test_vzip2_u32
    454   return vzip2_u32(a, b);
    455   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    456 }
    457 
    458 uint32x4_t test_vzip2q_u32(uint32x4_t a, uint32x4_t b) {
    459   // CHECK-LABEL: test_vzip2q_u32
    460   return vzip2q_u32(a, b);
    461   // CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    462 }
    463 
    464 uint64x2_t test_vzip2q_u64(uint64x2_t a, uint64x2_t b) {
    465   // CHECK-LABEL: test_vzip2q_u64
    466   return vzip2q_u64(a, b);
    467   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    468 }
    469 
    470 float32x2_t test_vzip2_f32(float32x2_t a, float32x2_t b) {
    471   // CHECK-LABEL: test_vzip2_f32
    472   return vzip2_f32(a, b);
    473   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    474 }
    475 
    476 float32x4_t test_vzip2q_f32(float32x4_t a, float32x4_t b) {
    477   // CHECK-LABEL: test_vzip2q_f32
    478   return vzip2q_f32(a, b);
    479   // CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    480 }
    481 
    482 float64x2_t test_vzip2q_f64(float64x2_t a, float64x2_t b) {
    483   // CHECK-LABEL: test_vzip2q_f64
    484   return vzip2q_f64(a, b);
    485   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    486 }
    487 
    488 poly8x8_t test_vzip2_p8(poly8x8_t a, poly8x8_t b) {
    489   // CHECK-LABEL: test_vzip2_p8
    490   return vzip2_p8(a, b);
    491   // CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    492 }
    493 
    494 poly8x16_t test_vzip2q_p8(poly8x16_t a, poly8x16_t b) {
    495   // CHECK-LABEL: test_vzip2q_p8
    496   return vzip2q_p8(a, b);
    497   // CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    498 }
    499 
    500 poly16x4_t test_vzip2_p16(poly16x4_t a, poly16x4_t b) {
    501   // CHECK-LABEL: test_vzip2_p16
    502   return vzip2_p16(a, b);
    503   // CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    504 }
    505 
    506 poly16x8_t test_vzip2q_p16(poly16x8_t a, poly16x8_t b) {
    507   // CHECK-LABEL: test_vzip2q_p16
    508   return vzip2q_p16(a, b);
    509   // CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    510 }
    511 
    512 int8x8_t test_vtrn1_s8(int8x8_t a, int8x8_t b) {
    513   // CHECK-LABEL: test_vtrn1_s8
    514   return vtrn1_s8(a, b);
    515   // CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    516 }
    517 
    518 int8x16_t test_vtrn1q_s8(int8x16_t a, int8x16_t b) {
    519   // CHECK-LABEL: test_vtrn1q_s8
    520   return vtrn1q_s8(a, b);
    521   // CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    522 }
    523 
    524 int16x4_t test_vtrn1_s16(int16x4_t a, int16x4_t b) {
    525   // CHECK-LABEL: test_vtrn1_s16
    526   return vtrn1_s16(a, b);
    527   // CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    528 }
    529 
    530 int16x8_t test_vtrn1q_s16(int16x8_t a, int16x8_t b) {
    531   // CHECK-LABEL: test_vtrn1q_s16
    532   return vtrn1q_s16(a, b);
    533   // CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    534 }
    535 
    536 int32x2_t test_vtrn1_s32(int32x2_t a, int32x2_t b) {
    537   // CHECK-LABEL: test_vtrn1_s32
    538   return vtrn1_s32(a, b);
    539   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
    540 }
    541 
    542 int32x4_t test_vtrn1q_s32(int32x4_t a, int32x4_t b) {
    543   // CHECK-LABEL: test_vtrn1q_s32
    544   return vtrn1q_s32(a, b);
    545   // CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    546 }
    547 
    548 int64x2_t test_vtrn1q_s64(int64x2_t a, int64x2_t b) {
    549   // CHECK-LABEL: test_vtrn1q_s64
    550   return vtrn1q_s64(a, b);
    551   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
    552 }
    553 
    554 uint8x8_t test_vtrn1_u8(uint8x8_t a, uint8x8_t b) {
    555   // CHECK-LABEL: test_vtrn1_u8
    556   return vtrn1_u8(a, b);
    557   // CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    558 }
    559 
    560 uint8x16_t test_vtrn1q_u8(uint8x16_t a, uint8x16_t b) {
    561   // CHECK-LABEL: test_vtrn1q_u8
    562   return vtrn1q_u8(a, b);
    563   // CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    564 }
    565 
    566 uint16x4_t test_vtrn1_u16(uint16x4_t a, uint16x4_t b) {
    567   // CHECK-LABEL: test_vtrn1_u16
    568   return vtrn1_u16(a, b);
    569   // CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    570 }
    571 
    572 uint16x8_t test_vtrn1q_u16(uint16x8_t a, uint16x8_t b) {
    573   // CHECK-LABEL: test_vtrn1q_u16
    574   return vtrn1q_u16(a, b);
    575   // CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    576 }
    577 
    578 uint32x2_t test_vtrn1_u32(uint32x2_t a, uint32x2_t b) {
    579   // CHECK-LABEL: test_vtrn1_u32
    580   return vtrn1_u32(a, b);
    581   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
    582 }
    583 
    584 uint32x4_t test_vtrn1q_u32(uint32x4_t a, uint32x4_t b) {
    585   // CHECK-LABEL: test_vtrn1q_u32
    586   return vtrn1q_u32(a, b);
    587   // CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    588 }
    589 
    590 uint64x2_t test_vtrn1q_u64(uint64x2_t a, uint64x2_t b) {
    591   // CHECK-LABEL: test_vtrn1q_u64
    592   return vtrn1q_u64(a, b);
    593   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
    594 }
    595 
    596 float32x2_t test_vtrn1_f32(float32x2_t a, float32x2_t b) {
    597   // CHECK-LABEL: test_vtrn1_f32
    598   return vtrn1_f32(a, b);
    599   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v0.2s, v0.2s, v1.2s}}
    600 }
    601 
    602 float32x4_t test_vtrn1q_f32(float32x4_t a, float32x4_t b) {
    603   // CHECK-LABEL: test_vtrn1q_f32
    604   return vtrn1q_f32(a, b);
    605   // CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    606 }
    607 
    608 float64x2_t test_vtrn1q_f64(float64x2_t a, float64x2_t b) {
    609   // CHECK-LABEL: test_vtrn1q_f64
    610   return vtrn1q_f64(a, b);
    611   // CHECK: {{ins v[0-9]+.d\[1\], v[0-9]+.d\[0\]|zip1 v0.2d, v0.2d, v1.2d}}
    612 }
    613 
    614 poly8x8_t test_vtrn1_p8(poly8x8_t a, poly8x8_t b) {
    615   // CHECK-LABEL: test_vtrn1_p8
    616   return vtrn1_p8(a, b);
    617   // CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    618 }
    619 
    620 poly8x16_t test_vtrn1q_p8(poly8x16_t a, poly8x16_t b) {
    621   // CHECK-LABEL: test_vtrn1q_p8
    622   return vtrn1q_p8(a, b);
    623   // CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    624 }
    625 
    626 poly16x4_t test_vtrn1_p16(poly16x4_t a, poly16x4_t b) {
    627   // CHECK-LABEL: test_vtrn1_p16
    628   return vtrn1_p16(a, b);
    629   // CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    630 }
    631 
    632 poly16x8_t test_vtrn1q_p16(poly16x8_t a, poly16x8_t b) {
    633   // CHECK-LABEL: test_vtrn1q_p16
    634   return vtrn1q_p16(a, b);
    635   // CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    636 }
    637 
    638 int8x8_t test_vtrn2_s8(int8x8_t a, int8x8_t b) {
    639   // CHECK-LABEL: test_vtrn2_s8
    640   return vtrn2_s8(a, b);
    641   // CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    642 }
    643 
    644 int8x16_t test_vtrn2q_s8(int8x16_t a, int8x16_t b) {
    645   // CHECK-LABEL: test_vtrn2q_s8
    646   return vtrn2q_s8(a, b);
    647   // CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    648 }
    649 
    650 int16x4_t test_vtrn2_s16(int16x4_t a, int16x4_t b) {
    651   // CHECK-LABEL: test_vtrn2_s16
    652   return vtrn2_s16(a, b);
    653   // CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    654 }
    655 
    656 int16x8_t test_vtrn2q_s16(int16x8_t a, int16x8_t b) {
    657   // CHECK-LABEL: test_vtrn2q_s16
    658   return vtrn2q_s16(a, b);
    659   // CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    660 }
    661 
    662 int32x2_t test_vtrn2_s32(int32x2_t a, int32x2_t b) {
    663   // CHECK-LABEL: test_vtrn2_s32
    664   return vtrn2_s32(a, b);
    665   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    666 }
    667 
    668 int32x4_t test_vtrn2q_s32(int32x4_t a, int32x4_t b) {
    669   // CHECK-LABEL: test_vtrn2q_s32
    670   return vtrn2q_s32(a, b);
    671   // CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    672 }
    673 
    674 int64x2_t test_vtrn2q_s64(int64x2_t a, int64x2_t b) {
    675   // CHECK-LABEL: test_vtrn2q_s64
    676   return vtrn2q_s64(a, b);
    677   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    678 }
    679 
    680 uint8x8_t test_vtrn2_u8(uint8x8_t a, uint8x8_t b) {
    681   // CHECK-LABEL: test_vtrn2_u8
    682   return vtrn2_u8(a, b);
    683   // CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    684 }
    685 
    686 uint8x16_t test_vtrn2q_u8(uint8x16_t a, uint8x16_t b) {
    687   // CHECK-LABEL: test_vtrn2q_u8
    688   return vtrn2q_u8(a, b);
    689   // CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    690 }
    691 
    692 uint16x4_t test_vtrn2_u16(uint16x4_t a, uint16x4_t b) {
    693   // CHECK-LABEL: test_vtrn2_u16
    694   return vtrn2_u16(a, b);
    695   // CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    696 }
    697 
    698 uint16x8_t test_vtrn2q_u16(uint16x8_t a, uint16x8_t b) {
    699   // CHECK-LABEL: test_vtrn2q_u16
    700   return vtrn2q_u16(a, b);
    701   // CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    702 }
    703 
    704 uint32x2_t test_vtrn2_u32(uint32x2_t a, uint32x2_t b) {
    705   // CHECK-LABEL: test_vtrn2_u32
    706   return vtrn2_u32(a, b);
    707   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    708 }
    709 
    710 uint32x4_t test_vtrn2q_u32(uint32x4_t a, uint32x4_t b) {
    711   // CHECK-LABEL: test_vtrn2q_u32
    712   return vtrn2q_u32(a, b);
    713   // CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    714 }
    715 
    716 uint64x2_t test_vtrn2q_u64(uint64x2_t a, uint64x2_t b) {
    717   // CHECK-LABEL: test_vtrn2q_u64
    718   return vtrn2q_u64(a, b);
    719   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    720 }
    721 
    722 float32x2_t test_vtrn2_f32(float32x2_t a, float32x2_t b) {
    723   // CHECK-LABEL: test_vtrn2_f32
    724   return vtrn2_f32(a, b);
    725   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v0.2s, v0.2s, v1.2s}}
    726 }
    727 
    728 float32x4_t test_vtrn2q_f32(float32x4_t a, float32x4_t b) {
    729   // CHECK-LABEL: test_vtrn2q_f32
    730   return vtrn2q_f32(a, b);
    731   // CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    732 }
    733 
    734 float64x2_t test_vtrn2q_f64(float64x2_t a, float64x2_t b) {
    735   // CHECK-LABEL: test_vtrn2q_f64
    736   return vtrn2q_f64(a, b);
    737   // CHECK: {{ins v[0-9]+.d\[0\], v[0-9]+.d\[1\]|zip2 v0.2d, v0.2d, v1.2d}}
    738 }
    739 
    740 poly8x8_t test_vtrn2_p8(poly8x8_t a, poly8x8_t b) {
    741   // CHECK-LABEL: test_vtrn2_p8
    742   return vtrn2_p8(a, b);
    743   // CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    744 }
    745 
    746 poly8x16_t test_vtrn2q_p8(poly8x16_t a, poly8x16_t b) {
    747   // CHECK-LABEL: test_vtrn2q_p8
    748   return vtrn2q_p8(a, b);
    749   // CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    750 }
    751 
    752 poly16x4_t test_vtrn2_p16(poly16x4_t a, poly16x4_t b) {
    753   // CHECK-LABEL: test_vtrn2_p16
    754   return vtrn2_p16(a, b);
    755   // CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    756 }
    757 
    758 poly16x8_t test_vtrn2q_p16(poly16x8_t a, poly16x8_t b) {
    759   // CHECK-LABEL: test_vtrn2q_p16
    760   return vtrn2q_p16(a, b);
    761   // CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    762 }
    763 
    764 int8x8x2_t test_vuzp_s8(int8x8_t a, int8x8_t b) {
    765   // CHECK-LABEL: test_vuzp_s8
    766   return vuzp_s8(a, b);
    767   // CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    768   // CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    769 }
    770 
    771 int16x4x2_t test_vuzp_s16(int16x4_t a, int16x4_t b) {
    772   // CHECK-LABEL: test_vuzp_s16
    773   return vuzp_s16(a, b);
    774   // CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    775   // CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    776 }
    777 int32x2x2_t test_vuzp_s32(int32x2_t a, int32x2_t b) {
    778   // CHECK-LABEL: test_vuzp_s32
    779   return vuzp_s32(a, b);
    780   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
    781   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
    782 }
    783 uint8x8x2_t test_vuzp_u8(uint8x8_t a, uint8x8_t b) {
    784   // CHECK-LABEL: test_vuzp_u8
    785   return vuzp_u8(a, b);
    786   // CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    787   // CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    788 }
    789 uint16x4x2_t test_vuzp_u16(uint16x4_t a, uint16x4_t b) {
    790   // CHECK-LABEL: test_vuzp_u16
    791   return vuzp_u16(a, b);
    792   // CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    793   // CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    794 }
    795 uint32x2x2_t test_vuzp_u32(uint32x2_t a, uint32x2_t b) {
    796   // CHECK-LABEL: test_vuzp_u32
    797   return vuzp_u32(a, b);
    798   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
    799   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
    800 }
    801 float32x2x2_t test_vuzp_f32(float32x2_t a, float32x2_t b) {
    802   // CHECK-LABEL: test_vuzp_f32
    803   return vuzp_f32(a, b);
    804   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
    805   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
    806 }
    807 poly8x8x2_t test_vuzp_p8(poly8x8_t a, poly8x8_t b) {
    808   // CHECK-LABEL: test_vuzp_p8
    809   return vuzp_p8(a, b);
    810   // CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    811   // CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    812 }
    813 poly16x4x2_t test_vuzp_p16(poly16x4_t a, poly16x4_t b) {
    814   // CHECK-LABEL: test_vuzp_p16
    815   return vuzp_p16(a, b);
    816   // CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    817   // CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    818 }
    819 int8x16x2_t test_vuzpq_s8(int8x16_t a, int8x16_t b) {
    820   // CHECK-LABEL: test_vuzpq_s8
    821   return vuzpq_s8(a, b);
    822   // CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    823   // CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    824 }
    825 int16x8x2_t test_vuzpq_s16(int16x8_t a, int16x8_t b) {
    826   // CHECK-LABEL: test_vuzpq_s16
    827   return vuzpq_s16(a, b);
    828   // CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    829   // CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    830 }
    831 int32x4x2_t test_vuzpq_s32(int32x4_t a, int32x4_t b) {
    832   // CHECK-LABEL: test_vuzpq_s32
    833   return vuzpq_s32(a, b);
    834   // CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    835   // CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    836 }
    837 uint8x16x2_t test_vuzpq_u8(uint8x16_t a, uint8x16_t b) {
    838   // CHECK-LABEL: test_vuzpq_u8
    839   return vuzpq_u8(a, b);
    840   // CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    841   // CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    842 }
    843 uint16x8x2_t test_vuzpq_u16(uint16x8_t a, uint16x8_t b) {
    844   // CHECK-LABEL: test_vuzpq_u16
    845   return vuzpq_u16(a, b);
    846   // CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    847   // CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    848 }
    849 uint32x4x2_t test_vuzpq_u32(uint32x4_t a, uint32x4_t b) {
    850   // CHECK-LABEL: test_vuzpq_u32
    851   return vuzpq_u32(a, b);
    852   // CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    853   // CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    854 }
    855 float32x4x2_t test_vuzpq_f32(float32x4_t a, float32x4_t b) {
    856   // CHECK-LABEL: test_vuzpq_f32
    857   return vuzpq_f32(a, b);
    858   // CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    859   // CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    860 }
    861 poly8x16x2_t test_vuzpq_p8(poly8x16_t a, poly8x16_t b) {
    862   // CHECK-LABEL: test_vuzpq_p8
    863   return vuzpq_p8(a, b);
    864   // CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    865   // CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    866 }
    867 poly16x8x2_t test_vuzpq_p16(poly16x8_t a, poly16x8_t b) {
    868   // CHECK-LABEL: test_vuzpq_p16
    869   return vuzpq_p16(a, b);
    870   // CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    871   // CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    872 }
    873 
    874 int8x8x2_t test_vzip_s8(int8x8_t a, int8x8_t b) {
    875   // CHECK-LABEL: test_vzip_s8
    876   return vzip_s8(a, b);
    877   // CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    878   // CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    879 }
    880 
    881 int16x4x2_t test_vzip_s16(int16x4_t a, int16x4_t b) {
    882   // CHECK-LABEL: test_vzip_s16
    883   return vzip_s16(a, b);
    884   // CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    885   // CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    886 }
    887 int32x2x2_t test_vzip_s32(int32x2_t a, int32x2_t b) {
    888   // CHECK-LABEL: test_vzip_s32
    889   return vzip_s32(a, b);
    890   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
    891   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
    892 }
    893 uint8x8x2_t test_vzip_u8(uint8x8_t a, uint8x8_t b) {
    894   // CHECK-LABEL: test_vzip_u8
    895   return vzip_u8(a, b);
    896   // CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    897   // CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    898 }
    899 uint16x4x2_t test_vzip_u16(uint16x4_t a, uint16x4_t b) {
    900   // CHECK-LABEL: test_vzip_u16
    901   return vzip_u16(a, b);
    902   // CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    903   // CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    904 }
    905 uint32x2x2_t test_vzip_u32(uint32x2_t a, uint32x2_t b) {
    906   // CHECK-LABEL: test_vzip_u32
    907   return vzip_u32(a, b);
    908   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
    909   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
    910 }
    911 float32x2x2_t test_vzip_f32(float32x2_t a, float32x2_t b) {
    912   // CHECK-LABEL: test_vzip_f32
    913   return vzip_f32(a, b);
    914   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
    915   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
    916 }
    917 poly8x8x2_t test_vzip_p8(poly8x8_t a, poly8x8_t b) {
    918   // CHECK-LABEL: test_vzip_p8
    919   return vzip_p8(a, b);
    920   // CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    921   // CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    922 }
    923 poly16x4x2_t test_vzip_p16(poly16x4_t a, poly16x4_t b) {
    924   // CHECK-LABEL: test_vzip_p16
    925   return vzip_p16(a, b);
    926   // CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    927   // CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    928 }
    929 int8x16x2_t test_vzipq_s8(int8x16_t a, int8x16_t b) {
    930   // CHECK-LABEL: test_vzipq_s8
    931   return vzipq_s8(a, b);
    932   // CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    933   // CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    934 }
    935 int16x8x2_t test_vzipq_s16(int16x8_t a, int16x8_t b) {
    936   // CHECK-LABEL: test_vzipq_s16
    937   return vzipq_s16(a, b);
    938   // CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    939   // CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    940 }
    941 int32x4x2_t test_vzipq_s32(int32x4_t a, int32x4_t b) {
    942   // CHECK-LABEL: test_vzipq_s32
    943   return vzipq_s32(a, b);
    944   // CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    945   // CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    946 }
    947 uint8x16x2_t test_vzipq_u8(uint8x16_t a, uint8x16_t b) {
    948   // CHECK-LABEL: test_vzipq_u8
    949   return vzipq_u8(a, b);
    950   // CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    951   // CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    952 }
    953 uint16x8x2_t test_vzipq_u16(uint16x8_t a, uint16x8_t b) {
    954   // CHECK-LABEL: test_vzipq_u16
    955   return vzipq_u16(a, b);
    956   // CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    957   // CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    958 }
    959 uint32x4x2_t test_vzipq_u32(uint32x4_t a, uint32x4_t b) {
    960   // CHECK-LABEL: test_vzipq_u32
    961   return vzipq_u32(a, b);
    962   // CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    963   // CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    964 }
    965 float32x4x2_t test_vzipq_f32(float32x4_t a, float32x4_t b) {
    966   // CHECK-LABEL: test_vzipq_f32
    967   return vzipq_f32(a, b);
    968   // CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    969   // CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    970 }
    971 poly8x16x2_t test_vzipq_p8(poly8x16_t a, poly8x16_t b) {
    972   // CHECK-LABEL: test_vzipq_p8
    973   return vzipq_p8(a, b);
    974   // CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    975   // CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    976 }
    977 poly16x8x2_t test_vzipq_p16(poly16x8_t a, poly16x8_t b) {
    978   // CHECK-LABEL: test_vzipq_p16
    979   return vzipq_p16(a, b);
    980   // CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    981   // CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    982 }
    983 
    984 int8x8x2_t test_vtrn_s8(int8x8_t a, int8x8_t b) {
    985   // CHECK-LABEL: test_vtrn_s8
    986   return vtrn_s8(a, b);
    987   // CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    988   // CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    989 }
    990 
    991 int16x4x2_t test_vtrn_s16(int16x4_t a, int16x4_t b) {
    992   // CHECK-LABEL: test_vtrn_s16
    993   return vtrn_s16(a, b);
    994   // CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    995   // CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    996 }
    997 int32x2x2_t test_vtrn_s32(int32x2_t a, int32x2_t b) {
    998   // CHECK-LABEL: test_vtrn_s32
    999   return vtrn_s32(a, b);
   1000   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
   1001   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
   1002 }
   1003 uint8x8x2_t test_vtrn_u8(uint8x8_t a, uint8x8_t b) {
   1004   // CHECK-LABEL: test_vtrn_u8
   1005   return vtrn_u8(a, b);
   1006   // CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1007   // CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1008 }
   1009 uint16x4x2_t test_vtrn_u16(uint16x4_t a, uint16x4_t b) {
   1010   // CHECK-LABEL: test_vtrn_u16
   1011   return vtrn_u16(a, b);
   1012   // CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1013   // CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1014 }
   1015 uint32x2x2_t test_vtrn_u32(uint32x2_t a, uint32x2_t b) {
   1016   // CHECK-LABEL: test_vtrn_u32
   1017   return vtrn_u32(a, b);
   1018   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
   1019   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
   1020 }
   1021 float32x2x2_t test_vtrn_f32(float32x2_t a, float32x2_t b) {
   1022   // CHECK-LABEL: test_vtrn_f32
   1023   return vtrn_f32(a, b);
   1024   // CHECK: {{ins v[0-9]+.s\[1\], v[0-9]+.s\[0\]|zip1 v2.2s, v0.2s, v1.2s}}
   1025   // CHECK: {{ins v[0-9]+.s\[0\], v[0-9]+.s\[1\]|zip2 v1.2s, v0.2s, v1.2s}}
   1026 }
   1027 poly8x8x2_t test_vtrn_p8(poly8x8_t a, poly8x8_t b) {
   1028   // CHECK-LABEL: test_vtrn_p8
   1029   return vtrn_p8(a, b);
   1030   // CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1031   // CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1032 }
   1033 poly16x4x2_t test_vtrn_p16(poly16x4_t a, poly16x4_t b) {
   1034   // CHECK-LABEL: test_vtrn_p16
   1035   return vtrn_p16(a, b);
   1036   // CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1037   // CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1038 }
   1039 int8x16x2_t test_vtrnq_s8(int8x16_t a, int8x16_t b) {
   1040   // CHECK-LABEL: test_vtrnq_s8
   1041   return vtrnq_s8(a, b);
   1042   // CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1043   // CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1044 }
   1045 int16x8x2_t test_vtrnq_s16(int16x8_t a, int16x8_t b) {
   1046   // CHECK-LABEL: test_vtrnq_s16
   1047   return vtrnq_s16(a, b);
   1048   // CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1049   // CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1050 }
   1051 int32x4x2_t test_vtrnq_s32(int32x4_t a, int32x4_t b) {
   1052   // CHECK-LABEL: test_vtrnq_s32
   1053   return vtrnq_s32(a, b);
   1054   // CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1055   // CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1056 }
   1057 uint8x16x2_t test_vtrnq_u8(uint8x16_t a, uint8x16_t b) {
   1058   // CHECK-LABEL: test_vtrnq_u8
   1059   return vtrnq_u8(a, b);
   1060   // CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1061   // CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1062 }
   1063 uint16x8x2_t test_vtrnq_u16(uint16x8_t a, uint16x8_t b) {
   1064   // CHECK-LABEL: test_vtrnq_u16
   1065   return vtrnq_u16(a, b);
   1066   // CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1067   // CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1068 }
   1069 uint32x4x2_t test_vtrnq_u32(uint32x4_t a, uint32x4_t b) {
   1070   // CHECK-LABEL: test_vtrnq_u32
   1071   return vtrnq_u32(a, b);
   1072   // CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1073   // CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1074 }
   1075 float32x4x2_t test_vtrnq_f32(float32x4_t a, float32x4_t b) {
   1076   // CHECK-LABEL: test_vtrnq_f32
   1077   return vtrnq_f32(a, b);
   1078   // CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1079   // CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1080 }
   1081 poly8x16x2_t test_vtrnq_p8(poly8x16_t a, poly8x16_t b) {
   1082   // CHECK-LABEL: test_vtrnq_p8
   1083   return vtrnq_p8(a, b);
   1084   // CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1085   // CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1086 }
   1087 poly16x8x2_t test_vtrnq_p16(poly16x8_t a, poly16x8_t b) {
   1088   // CHECK-LABEL: test_vtrnq_p16
   1089   return vtrnq_p16(a, b);
   1090   // CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1091   // CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1092 }
   1093