Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s --check-prefix=CHECK
      2 
      3 %struct.int8x8x2_t = type { [2 x <8 x i8>] }
      4 %struct.int16x4x2_t = type { [2 x <4 x i16>] }
      5 %struct.int32x2x2_t = type { [2 x <2 x i32>] }
      6 %struct.uint8x8x2_t = type { [2 x <8 x i8>] }
      7 %struct.uint16x4x2_t = type { [2 x <4 x i16>] }
      8 %struct.uint32x2x2_t = type { [2 x <2 x i32>] }
      9 %struct.float32x2x2_t = type { [2 x <2 x float>] }
     10 %struct.poly8x8x2_t = type { [2 x <8 x i8>] }
     11 %struct.poly16x4x2_t = type { [2 x <4 x i16>] }
     12 %struct.int8x16x2_t = type { [2 x <16 x i8>] }
     13 %struct.int16x8x2_t = type { [2 x <8 x i16>] }
     14 %struct.int32x4x2_t = type { [2 x <4 x i32>] }
     15 %struct.uint8x16x2_t = type { [2 x <16 x i8>] }
     16 %struct.uint16x8x2_t = type { [2 x <8 x i16>] }
     17 %struct.uint32x4x2_t = type { [2 x <4 x i32>] }
     18 %struct.float32x4x2_t = type { [2 x <4 x float>] }
     19 %struct.poly8x16x2_t = type { [2 x <16 x i8>] }
     20 %struct.poly16x8x2_t = type { [2 x <8 x i16>] }
     21 
     22 define <8 x i8> @test_vuzp1_s8(<8 x i8> %a, <8 x i8> %b) {
     23 ; CHECK-LABEL: test_vuzp1_s8:
     24 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     25 entry:
     26   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
     27   ret <8 x i8> %shuffle.i
     28 }
     29 
     30 define <16 x i8> @test_vuzp1q_s8(<16 x i8> %a, <16 x i8> %b) {
     31 ; CHECK-LABEL: test_vuzp1q_s8:
     32 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     33 entry:
     34   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
     35   ret <16 x i8> %shuffle.i
     36 }
     37 
     38 define <4 x i16> @test_vuzp1_s16(<4 x i16> %a, <4 x i16> %b) {
     39 ; CHECK-LABEL: test_vuzp1_s16:
     40 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     41 entry:
     42   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
     43   ret <4 x i16> %shuffle.i
     44 }
     45 
     46 define <8 x i16> @test_vuzp1q_s16(<8 x i16> %a, <8 x i16> %b) {
     47 ; CHECK-LABEL: test_vuzp1q_s16:
     48 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
     49 entry:
     50   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
     51   ret <8 x i16> %shuffle.i
     52 }
     53 
     54 define <2 x i32> @test_vuzp1_s32(<2 x i32> %a, <2 x i32> %b) {
     55 ; CHECK-LABEL: test_vuzp1_s32:
     56 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
     57 entry:
     58   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
     59   ret <2 x i32> %shuffle.i
     60 }
     61 
     62 define <4 x i32> @test_vuzp1q_s32(<4 x i32> %a, <4 x i32> %b) {
     63 ; CHECK-LABEL: test_vuzp1q_s32:
     64 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     65 entry:
     66   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
     67   ret <4 x i32> %shuffle.i
     68 }
     69 
     70 define <2 x i64> @test_vuzp1q_s64(<2 x i64> %a, <2 x i64> %b) {
     71 ; CHECK-LABEL: test_vuzp1q_s64:
     72 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
     73 entry:
     74   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
     75   ret <2 x i64> %shuffle.i
     76 }
     77 
     78 define <8 x i8> @test_vuzp1_u8(<8 x i8> %a, <8 x i8> %b) {
     79 ; CHECK-LABEL: test_vuzp1_u8:
     80 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     81 entry:
     82   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
     83   ret <8 x i8> %shuffle.i
     84 }
     85 
     86 define <16 x i8> @test_vuzp1q_u8(<16 x i8> %a, <16 x i8> %b) {
     87 ; CHECK-LABEL: test_vuzp1q_u8:
     88 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     89 entry:
     90   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
     91   ret <16 x i8> %shuffle.i
     92 }
     93 
     94 define <4 x i16> @test_vuzp1_u16(<4 x i16> %a, <4 x i16> %b) {
     95 ; CHECK-LABEL: test_vuzp1_u16:
     96 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     97 entry:
     98   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
     99   ret <4 x i16> %shuffle.i
    100 }
    101 
    102 define <8 x i16> @test_vuzp1q_u16(<8 x i16> %a, <8 x i16> %b) {
    103 ; CHECK-LABEL: test_vuzp1q_u16:
    104 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    105 entry:
    106   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
    107   ret <8 x i16> %shuffle.i
    108 }
    109 
    110 define <2 x i32> @test_vuzp1_u32(<2 x i32> %a, <2 x i32> %b) {
    111 ; CHECK-LABEL: test_vuzp1_u32:
    112 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    113 entry:
    114   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
    115   ret <2 x i32> %shuffle.i
    116 }
    117 
    118 define <4 x i32> @test_vuzp1q_u32(<4 x i32> %a, <4 x i32> %b) {
    119 ; CHECK-LABEL: test_vuzp1q_u32:
    120 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    121 entry:
    122   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
    123   ret <4 x i32> %shuffle.i
    124 }
    125 
    126 define <2 x i64> @test_vuzp1q_u64(<2 x i64> %a, <2 x i64> %b) {
    127 ; CHECK-LABEL: test_vuzp1q_u64:
    128 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    129 entry:
    130   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
    131   ret <2 x i64> %shuffle.i
    132 }
    133 
    134 define <2 x float> @test_vuzp1_f32(<2 x float> %a, <2 x float> %b) {
    135 ; CHECK-LABEL: test_vuzp1_f32:
    136 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    137 entry:
    138   %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
    139   ret <2 x float> %shuffle.i
    140 }
    141 
    142 define <4 x float> @test_vuzp1q_f32(<4 x float> %a, <4 x float> %b) {
    143 ; CHECK-LABEL: test_vuzp1q_f32:
    144 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    145 entry:
    146   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
    147   ret <4 x float> %shuffle.i
    148 }
    149 
    150 define <2 x double> @test_vuzp1q_f64(<2 x double> %a, <2 x double> %b) {
    151 ; CHECK-LABEL: test_vuzp1q_f64:
    152 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    153 entry:
    154   %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
    155   ret <2 x double> %shuffle.i
    156 }
    157 
    158 define <8 x i8> @test_vuzp1_p8(<8 x i8> %a, <8 x i8> %b) {
    159 ; CHECK-LABEL: test_vuzp1_p8:
    160 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    161 entry:
    162   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
    163   ret <8 x i8> %shuffle.i
    164 }
    165 
    166 define <16 x i8> @test_vuzp1q_p8(<16 x i8> %a, <16 x i8> %b) {
    167 ; CHECK-LABEL: test_vuzp1q_p8:
    168 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    169 entry:
    170   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
    171   ret <16 x i8> %shuffle.i
    172 }
    173 
    174 define <4 x i16> @test_vuzp1_p16(<4 x i16> %a, <4 x i16> %b) {
    175 ; CHECK-LABEL: test_vuzp1_p16:
    176 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    177 entry:
    178   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
    179   ret <4 x i16> %shuffle.i
    180 }
    181 
    182 define <8 x i16> @test_vuzp1q_p16(<8 x i16> %a, <8 x i16> %b) {
    183 ; CHECK-LABEL: test_vuzp1q_p16:
    184 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    185 entry:
    186   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
    187   ret <8 x i16> %shuffle.i
    188 }
    189 
    190 define <8 x i8> @test_vuzp2_s8(<8 x i8> %a, <8 x i8> %b) {
    191 ; CHECK-LABEL: test_vuzp2_s8:
    192 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    193 entry:
    194   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
    195   ret <8 x i8> %shuffle.i
    196 }
    197 
    198 define <16 x i8> @test_vuzp2q_s8(<16 x i8> %a, <16 x i8> %b) {
    199 ; CHECK-LABEL: test_vuzp2q_s8:
    200 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    201 entry:
    202   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
    203   ret <16 x i8> %shuffle.i
    204 }
    205 
    206 define <4 x i16> @test_vuzp2_s16(<4 x i16> %a, <4 x i16> %b) {
    207 ; CHECK-LABEL: test_vuzp2_s16:
    208 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    209 entry:
    210   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
    211   ret <4 x i16> %shuffle.i
    212 }
    213 
    214 define <8 x i16> @test_vuzp2q_s16(<8 x i16> %a, <8 x i16> %b) {
    215 ; CHECK-LABEL: test_vuzp2q_s16:
    216 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    217 entry:
    218   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
    219   ret <8 x i16> %shuffle.i
    220 }
    221 
    222 define <2 x i32> @test_vuzp2_s32(<2 x i32> %a, <2 x i32> %b) {
    223 ; CHECK-LABEL: test_vuzp2_s32:
    224 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    225 entry:
    226   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
    227   ret <2 x i32> %shuffle.i
    228 }
    229 
    230 define <4 x i32> @test_vuzp2q_s32(<4 x i32> %a, <4 x i32> %b) {
    231 ; CHECK-LABEL: test_vuzp2q_s32:
    232 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    233 entry:
    234   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
    235   ret <4 x i32> %shuffle.i
    236 }
    237 
    238 define <2 x i64> @test_vuzp2q_s64(<2 x i64> %a, <2 x i64> %b) {
    239 ; CHECK-LABEL: test_vuzp2q_s64:
    240 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    241 entry:
    242   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
    243   ret <2 x i64> %shuffle.i
    244 }
    245 
    246 define <8 x i8> @test_vuzp2_u8(<8 x i8> %a, <8 x i8> %b) {
    247 ; CHECK-LABEL: test_vuzp2_u8:
    248 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    249 entry:
    250   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
    251   ret <8 x i8> %shuffle.i
    252 }
    253 
    254 define <16 x i8> @test_vuzp2q_u8(<16 x i8> %a, <16 x i8> %b) {
    255 ; CHECK-LABEL: test_vuzp2q_u8:
    256 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    257 entry:
    258   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
    259   ret <16 x i8> %shuffle.i
    260 }
    261 
    262 define <4 x i16> @test_vuzp2_u16(<4 x i16> %a, <4 x i16> %b) {
    263 ; CHECK-LABEL: test_vuzp2_u16:
    264 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    265 entry:
    266   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
    267   ret <4 x i16> %shuffle.i
    268 }
    269 
    270 define <8 x i16> @test_vuzp2q_u16(<8 x i16> %a, <8 x i16> %b) {
    271 ; CHECK-LABEL: test_vuzp2q_u16:
    272 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    273 entry:
    274   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
    275   ret <8 x i16> %shuffle.i
    276 }
    277 
    278 define <2 x i32> @test_vuzp2_u32(<2 x i32> %a, <2 x i32> %b) {
    279 ; CHECK-LABEL: test_vuzp2_u32:
    280 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    281 entry:
    282   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
    283   ret <2 x i32> %shuffle.i
    284 }
    285 
    286 define <4 x i32> @test_vuzp2q_u32(<4 x i32> %a, <4 x i32> %b) {
    287 ; CHECK-LABEL: test_vuzp2q_u32:
    288 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    289 entry:
    290   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
    291   ret <4 x i32> %shuffle.i
    292 }
    293 
    294 define <2 x i64> @test_vuzp2q_u64(<2 x i64> %a, <2 x i64> %b) {
    295 ; CHECK-LABEL: test_vuzp2q_u64:
    296 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    297 entry:
    298   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
    299   ret <2 x i64> %shuffle.i
    300 }
    301 
    302 define <2 x float> @test_vuzp2_f32(<2 x float> %a, <2 x float> %b) {
    303 ; CHECK-LABEL: test_vuzp2_f32:
    304 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    305 entry:
    306   %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
    307   ret <2 x float> %shuffle.i
    308 }
    309 
    310 define <4 x float> @test_vuzp2q_f32(<4 x float> %a, <4 x float> %b) {
    311 ; CHECK-LABEL: test_vuzp2q_f32:
    312 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    313 entry:
    314   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
    315   ret <4 x float> %shuffle.i
    316 }
    317 
    318 define <2 x double> @test_vuzp2q_f64(<2 x double> %a, <2 x double> %b) {
    319 ; CHECK-LABEL: test_vuzp2q_f64:
    320 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    321 entry:
    322   %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
    323   ret <2 x double> %shuffle.i
    324 }
    325 
    326 define <8 x i8> @test_vuzp2_p8(<8 x i8> %a, <8 x i8> %b) {
    327 ; CHECK-LABEL: test_vuzp2_p8:
    328 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    329 entry:
    330   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
    331   ret <8 x i8> %shuffle.i
    332 }
    333 
    334 define <16 x i8> @test_vuzp2q_p8(<16 x i8> %a, <16 x i8> %b) {
    335 ; CHECK-LABEL: test_vuzp2q_p8:
    336 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    337 entry:
    338   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
    339   ret <16 x i8> %shuffle.i
    340 }
    341 
    342 define <4 x i16> @test_vuzp2_p16(<4 x i16> %a, <4 x i16> %b) {
    343 ; CHECK-LABEL: test_vuzp2_p16:
    344 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    345 entry:
    346   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
    347   ret <4 x i16> %shuffle.i
    348 }
    349 
    350 define <8 x i16> @test_vuzp2q_p16(<8 x i16> %a, <8 x i16> %b) {
    351 ; CHECK-LABEL: test_vuzp2q_p16:
    352 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    353 entry:
    354   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
    355   ret <8 x i16> %shuffle.i
    356 }
    357 
    358 define <8 x i8> @test_vzip1_s8(<8 x i8> %a, <8 x i8> %b) {
    359 ; CHECK-LABEL: test_vzip1_s8:
    360 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    361 entry:
    362   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
    363   ret <8 x i8> %shuffle.i
    364 }
    365 
    366 define <16 x i8> @test_vzip1q_s8(<16 x i8> %a, <16 x i8> %b) {
    367 ; CHECK-LABEL: test_vzip1q_s8:
    368 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    369 entry:
    370   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
    371   ret <16 x i8> %shuffle.i
    372 }
    373 
    374 define <4 x i16> @test_vzip1_s16(<4 x i16> %a, <4 x i16> %b) {
    375 ; CHECK-LABEL: test_vzip1_s16:
    376 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    377 entry:
    378   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
    379   ret <4 x i16> %shuffle.i
    380 }
    381 
    382 define <8 x i16> @test_vzip1q_s16(<8 x i16> %a, <8 x i16> %b) {
    383 ; CHECK-LABEL: test_vzip1q_s16:
    384 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    385 entry:
    386   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
    387   ret <8 x i16> %shuffle.i
    388 }
    389 
    390 define <2 x i32> @test_vzip1_s32(<2 x i32> %a, <2 x i32> %b) {
    391 ; CHECK-LABEL: test_vzip1_s32:
    392 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    393 entry:
    394   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
    395   ret <2 x i32> %shuffle.i
    396 }
    397 
    398 define <4 x i32> @test_vzip1q_s32(<4 x i32> %a, <4 x i32> %b) {
    399 ; CHECK-LABEL: test_vzip1q_s32:
    400 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    401 entry:
    402   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
    403   ret <4 x i32> %shuffle.i
    404 }
    405 
    406 define <2 x i64> @test_vzip1q_s64(<2 x i64> %a, <2 x i64> %b) {
    407 ; CHECK-LABEL: test_vzip1q_s64:
    408 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    409 entry:
    410   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
    411   ret <2 x i64> %shuffle.i
    412 }
    413 
    414 define <8 x i8> @test_vzip1_u8(<8 x i8> %a, <8 x i8> %b) {
    415 ; CHECK-LABEL: test_vzip1_u8:
    416 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    417 entry:
    418   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
    419   ret <8 x i8> %shuffle.i
    420 }
    421 
    422 define <16 x i8> @test_vzip1q_u8(<16 x i8> %a, <16 x i8> %b) {
    423 ; CHECK-LABEL: test_vzip1q_u8:
    424 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    425 entry:
    426   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
    427   ret <16 x i8> %shuffle.i
    428 }
    429 
    430 define <4 x i16> @test_vzip1_u16(<4 x i16> %a, <4 x i16> %b) {
    431 ; CHECK-LABEL: test_vzip1_u16:
    432 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    433 entry:
    434   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
    435   ret <4 x i16> %shuffle.i
    436 }
    437 
    438 define <8 x i16> @test_vzip1q_u16(<8 x i16> %a, <8 x i16> %b) {
    439 ; CHECK-LABEL: test_vzip1q_u16:
    440 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    441 entry:
    442   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
    443   ret <8 x i16> %shuffle.i
    444 }
    445 
    446 define <2 x i32> @test_vzip1_u32(<2 x i32> %a, <2 x i32> %b) {
    447 ; CHECK-LABEL: test_vzip1_u32:
    448 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    449 entry:
    450   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
    451   ret <2 x i32> %shuffle.i
    452 }
    453 
    454 define <4 x i32> @test_vzip1q_u32(<4 x i32> %a, <4 x i32> %b) {
    455 ; CHECK-LABEL: test_vzip1q_u32:
    456 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    457 entry:
    458   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
    459   ret <4 x i32> %shuffle.i
    460 }
    461 
    462 define <2 x i64> @test_vzip1q_u64(<2 x i64> %a, <2 x i64> %b) {
    463 ; CHECK-LABEL: test_vzip1q_u64:
    464 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    465 entry:
    466   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
    467   ret <2 x i64> %shuffle.i
    468 }
    469 
    470 define <2 x float> @test_vzip1_f32(<2 x float> %a, <2 x float> %b) {
    471 ; CHECK-LABEL: test_vzip1_f32:
    472 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    473 entry:
    474   %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
    475   ret <2 x float> %shuffle.i
    476 }
    477 
    478 define <4 x float> @test_vzip1q_f32(<4 x float> %a, <4 x float> %b) {
    479 ; CHECK-LABEL: test_vzip1q_f32:
    480 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    481 entry:
    482   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
    483   ret <4 x float> %shuffle.i
    484 }
    485 
    486 define <2 x double> @test_vzip1q_f64(<2 x double> %a, <2 x double> %b) {
    487 ; CHECK-LABEL: test_vzip1q_f64:
    488 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    489 entry:
    490   %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
    491   ret <2 x double> %shuffle.i
    492 }
    493 
    494 define <8 x i8> @test_vzip1_p8(<8 x i8> %a, <8 x i8> %b) {
    495 ; CHECK-LABEL: test_vzip1_p8:
    496 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    497 entry:
    498   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
    499   ret <8 x i8> %shuffle.i
    500 }
    501 
    502 define <16 x i8> @test_vzip1q_p8(<16 x i8> %a, <16 x i8> %b) {
    503 ; CHECK-LABEL: test_vzip1q_p8:
    504 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    505 entry:
    506   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
    507   ret <16 x i8> %shuffle.i
    508 }
    509 
    510 define <4 x i16> @test_vzip1_p16(<4 x i16> %a, <4 x i16> %b) {
    511 ; CHECK-LABEL: test_vzip1_p16:
    512 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    513 entry:
    514   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
    515   ret <4 x i16> %shuffle.i
    516 }
    517 
    518 define <8 x i16> @test_vzip1q_p16(<8 x i16> %a, <8 x i16> %b) {
    519 ; CHECK-LABEL: test_vzip1q_p16:
    520 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    521 entry:
    522   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
    523   ret <8 x i16> %shuffle.i
    524 }
    525 
    526 define <8 x i8> @test_vzip2_s8(<8 x i8> %a, <8 x i8> %b) {
    527 ; CHECK-LABEL: test_vzip2_s8:
    528 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    529 entry:
    530   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
    531   ret <8 x i8> %shuffle.i
    532 }
    533 
    534 define <16 x i8> @test_vzip2q_s8(<16 x i8> %a, <16 x i8> %b) {
    535 ; CHECK-LABEL: test_vzip2q_s8:
    536 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    537 entry:
    538   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
    539   ret <16 x i8> %shuffle.i
    540 }
    541 
    542 define <4 x i16> @test_vzip2_s16(<4 x i16> %a, <4 x i16> %b) {
    543 ; CHECK-LABEL: test_vzip2_s16:
    544 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    545 entry:
    546   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
    547   ret <4 x i16> %shuffle.i
    548 }
    549 
    550 define <8 x i16> @test_vzip2q_s16(<8 x i16> %a, <8 x i16> %b) {
    551 ; CHECK-LABEL: test_vzip2q_s16:
    552 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    553 entry:
    554   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
    555   ret <8 x i16> %shuffle.i
    556 }
    557 
    558 define <2 x i32> @test_vzip2_s32(<2 x i32> %a, <2 x i32> %b) {
    559 ; CHECK-LABEL: test_vzip2_s32:
    560 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    561 entry:
    562   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
    563   ret <2 x i32> %shuffle.i
    564 }
    565 
    566 define <4 x i32> @test_vzip2q_s32(<4 x i32> %a, <4 x i32> %b) {
    567 ; CHECK-LABEL: test_vzip2q_s32:
    568 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    569 entry:
    570   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
    571   ret <4 x i32> %shuffle.i
    572 }
    573 
    574 define <2 x i64> @test_vzip2q_s64(<2 x i64> %a, <2 x i64> %b) {
    575 ; CHECK-LABEL: test_vzip2q_s64:
    576 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    577 entry:
    578   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
    579   ret <2 x i64> %shuffle.i
    580 }
    581 
    582 define <8 x i8> @test_vzip2_u8(<8 x i8> %a, <8 x i8> %b) {
    583 ; CHECK-LABEL: test_vzip2_u8:
    584 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    585 entry:
    586   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
    587   ret <8 x i8> %shuffle.i
    588 }
    589 
    590 define <16 x i8> @test_vzip2q_u8(<16 x i8> %a, <16 x i8> %b) {
    591 ; CHECK-LABEL: test_vzip2q_u8:
    592 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    593 entry:
    594   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
    595   ret <16 x i8> %shuffle.i
    596 }
    597 
    598 define <4 x i16> @test_vzip2_u16(<4 x i16> %a, <4 x i16> %b) {
    599 ; CHECK-LABEL: test_vzip2_u16:
    600 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    601 entry:
    602   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
    603   ret <4 x i16> %shuffle.i
    604 }
    605 
    606 define <8 x i16> @test_vzip2q_u16(<8 x i16> %a, <8 x i16> %b) {
    607 ; CHECK-LABEL: test_vzip2q_u16:
    608 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    609 entry:
    610   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
    611   ret <8 x i16> %shuffle.i
    612 }
    613 
    614 define <2 x i32> @test_vzip2_u32(<2 x i32> %a, <2 x i32> %b) {
    615 ; CHECK-LABEL: test_vzip2_u32:
    616 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    617 entry:
    618   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
    619   ret <2 x i32> %shuffle.i
    620 }
    621 
    622 define <4 x i32> @test_vzip2q_u32(<4 x i32> %a, <4 x i32> %b) {
    623 ; CHECK-LABEL: test_vzip2q_u32:
    624 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    625 entry:
    626   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
    627   ret <4 x i32> %shuffle.i
    628 }
    629 
    630 define <2 x i64> @test_vzip2q_u64(<2 x i64> %a, <2 x i64> %b) {
    631 ; CHECK-LABEL: test_vzip2q_u64:
    632 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    633 entry:
    634   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
    635   ret <2 x i64> %shuffle.i
    636 }
    637 
    638 define <2 x float> @test_vzip2_f32(<2 x float> %a, <2 x float> %b) {
    639 ; CHECK-LABEL: test_vzip2_f32:
    640 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    641 entry:
    642   %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
    643   ret <2 x float> %shuffle.i
    644 }
    645 
    646 define <4 x float> @test_vzip2q_f32(<4 x float> %a, <4 x float> %b) {
    647 ; CHECK-LABEL: test_vzip2q_f32:
    648 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    649 entry:
    650   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
    651   ret <4 x float> %shuffle.i
    652 }
    653 
    654 define <2 x double> @test_vzip2q_f64(<2 x double> %a, <2 x double> %b) {
    655 ; CHECK-LABEL: test_vzip2q_f64:
    656 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    657 entry:
    658   %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
    659   ret <2 x double> %shuffle.i
    660 }
    661 
    662 define <8 x i8> @test_vzip2_p8(<8 x i8> %a, <8 x i8> %b) {
    663 ; CHECK-LABEL: test_vzip2_p8:
    664 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    665 entry:
    666   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
    667   ret <8 x i8> %shuffle.i
    668 }
    669 
    670 define <16 x i8> @test_vzip2q_p8(<16 x i8> %a, <16 x i8> %b) {
    671 ; CHECK-LABEL: test_vzip2q_p8:
    672 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    673 entry:
    674   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
    675   ret <16 x i8> %shuffle.i
    676 }
    677 
    678 define <4 x i16> @test_vzip2_p16(<4 x i16> %a, <4 x i16> %b) {
    679 ; CHECK-LABEL: test_vzip2_p16:
    680 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    681 entry:
    682   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
    683   ret <4 x i16> %shuffle.i
    684 }
    685 
    686 define <8 x i16> @test_vzip2q_p16(<8 x i16> %a, <8 x i16> %b) {
    687 ; CHECK-LABEL: test_vzip2q_p16:
    688 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    689 entry:
    690   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
    691   ret <8 x i16> %shuffle.i
    692 }
    693 
    694 define <8 x i8> @test_vtrn1_s8(<8 x i8> %a, <8 x i8> %b) {
    695 ; CHECK-LABEL: test_vtrn1_s8:
    696 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    697 entry:
    698   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
    699   ret <8 x i8> %shuffle.i
    700 }
    701 
    702 define <16 x i8> @test_vtrn1q_s8(<16 x i8> %a, <16 x i8> %b) {
    703 ; CHECK-LABEL: test_vtrn1q_s8:
    704 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    705 entry:
    706   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
    707   ret <16 x i8> %shuffle.i
    708 }
    709 
    710 define <4 x i16> @test_vtrn1_s16(<4 x i16> %a, <4 x i16> %b) {
    711 ; CHECK-LABEL: test_vtrn1_s16:
    712 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    713 entry:
    714   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
    715   ret <4 x i16> %shuffle.i
    716 }
    717 
    718 define <8 x i16> @test_vtrn1q_s16(<8 x i16> %a, <8 x i16> %b) {
    719 ; CHECK-LABEL: test_vtrn1q_s16:
    720 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    721 entry:
    722   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
    723   ret <8 x i16> %shuffle.i
    724 }
    725 
    726 define <2 x i32> @test_vtrn1_s32(<2 x i32> %a, <2 x i32> %b) {
    727 ; CHECK-LABEL: test_vtrn1_s32:
    728 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    729 entry:
    730   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
    731   ret <2 x i32> %shuffle.i
    732 }
    733 
    734 define <4 x i32> @test_vtrn1q_s32(<4 x i32> %a, <4 x i32> %b) {
    735 ; CHECK-LABEL: test_vtrn1q_s32:
    736 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    737 entry:
    738   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
    739   ret <4 x i32> %shuffle.i
    740 }
    741 
    742 define <2 x i64> @test_vtrn1q_s64(<2 x i64> %a, <2 x i64> %b) {
    743 ; CHECK-LABEL: test_vtrn1q_s64:
    744 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    745 entry:
    746   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
    747   ret <2 x i64> %shuffle.i
    748 }
    749 
    750 define <8 x i8> @test_vtrn1_u8(<8 x i8> %a, <8 x i8> %b) {
    751 ; CHECK-LABEL: test_vtrn1_u8:
    752 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    753 entry:
    754   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
    755   ret <8 x i8> %shuffle.i
    756 }
    757 
    758 define <16 x i8> @test_vtrn1q_u8(<16 x i8> %a, <16 x i8> %b) {
    759 ; CHECK-LABEL: test_vtrn1q_u8:
    760 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    761 entry:
    762   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
    763   ret <16 x i8> %shuffle.i
    764 }
    765 
    766 define <4 x i16> @test_vtrn1_u16(<4 x i16> %a, <4 x i16> %b) {
    767 ; CHECK-LABEL: test_vtrn1_u16:
    768 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    769 entry:
    770   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
    771   ret <4 x i16> %shuffle.i
    772 }
    773 
    774 define <8 x i16> @test_vtrn1q_u16(<8 x i16> %a, <8 x i16> %b) {
    775 ; CHECK-LABEL: test_vtrn1q_u16:
    776 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    777 entry:
    778   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
    779   ret <8 x i16> %shuffle.i
    780 }
    781 
    782 define <2 x i32> @test_vtrn1_u32(<2 x i32> %a, <2 x i32> %b) {
    783 ; CHECK-LABEL: test_vtrn1_u32:
    784 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    785 entry:
    786   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
    787   ret <2 x i32> %shuffle.i
    788 }
    789 
    790 define <4 x i32> @test_vtrn1q_u32(<4 x i32> %a, <4 x i32> %b) {
    791 ; CHECK-LABEL: test_vtrn1q_u32:
    792 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    793 entry:
    794   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
    795   ret <4 x i32> %shuffle.i
    796 }
    797 
    798 define <2 x i64> @test_vtrn1q_u64(<2 x i64> %a, <2 x i64> %b) {
    799 ; CHECK-LABEL: test_vtrn1q_u64:
    800 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    801 entry:
    802   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
    803   ret <2 x i64> %shuffle.i
    804 }
    805 
    806 define <2 x float> @test_vtrn1_f32(<2 x float> %a, <2 x float> %b) {
    807 ; CHECK-LABEL: test_vtrn1_f32:
    808 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    809 entry:
    810   %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
    811   ret <2 x float> %shuffle.i
    812 }
    813 
    814 define <4 x float> @test_vtrn1q_f32(<4 x float> %a, <4 x float> %b) {
    815 ; CHECK-LABEL: test_vtrn1q_f32:
    816 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    817 entry:
    818   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
    819   ret <4 x float> %shuffle.i
    820 }
    821 
    822 define <2 x double> @test_vtrn1q_f64(<2 x double> %a, <2 x double> %b) {
    823 ; CHECK-LABEL: test_vtrn1q_f64:
    824 ; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    825 entry:
    826   %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
    827   ret <2 x double> %shuffle.i
    828 }
    829 
    830 define <8 x i8> @test_vtrn1_p8(<8 x i8> %a, <8 x i8> %b) {
    831 ; CHECK-LABEL: test_vtrn1_p8:
    832 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    833 entry:
    834   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
    835   ret <8 x i8> %shuffle.i
    836 }
    837 
    838 define <16 x i8> @test_vtrn1q_p8(<16 x i8> %a, <16 x i8> %b) {
    839 ; CHECK-LABEL: test_vtrn1q_p8:
    840 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    841 entry:
    842   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
    843   ret <16 x i8> %shuffle.i
    844 }
    845 
    846 define <4 x i16> @test_vtrn1_p16(<4 x i16> %a, <4 x i16> %b) {
    847 ; CHECK-LABEL: test_vtrn1_p16:
    848 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    849 entry:
    850   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
    851   ret <4 x i16> %shuffle.i
    852 }
    853 
    854 define <8 x i16> @test_vtrn1q_p16(<8 x i16> %a, <8 x i16> %b) {
    855 ; CHECK-LABEL: test_vtrn1q_p16:
    856 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    857 entry:
    858   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
    859   ret <8 x i16> %shuffle.i
    860 }
    861 
    862 define <8 x i8> @test_vtrn2_s8(<8 x i8> %a, <8 x i8> %b) {
    863 ; CHECK-LABEL: test_vtrn2_s8:
    864 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    865 entry:
    866   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
    867   ret <8 x i8> %shuffle.i
    868 }
    869 
    870 define <16 x i8> @test_vtrn2q_s8(<16 x i8> %a, <16 x i8> %b) {
    871 ; CHECK-LABEL: test_vtrn2q_s8:
    872 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    873 entry:
    874   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
    875   ret <16 x i8> %shuffle.i
    876 }
    877 
    878 define <4 x i16> @test_vtrn2_s16(<4 x i16> %a, <4 x i16> %b) {
    879 ; CHECK-LABEL: test_vtrn2_s16:
    880 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    881 entry:
    882   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
    883   ret <4 x i16> %shuffle.i
    884 }
    885 
    886 define <8 x i16> @test_vtrn2q_s16(<8 x i16> %a, <8 x i16> %b) {
    887 ; CHECK-LABEL: test_vtrn2q_s16:
    888 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    889 entry:
    890   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
    891   ret <8 x i16> %shuffle.i
    892 }
    893 
    894 define <2 x i32> @test_vtrn2_s32(<2 x i32> %a, <2 x i32> %b) {
    895 ; CHECK-LABEL: test_vtrn2_s32:
    896 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    897 entry:
    898   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
    899   ret <2 x i32> %shuffle.i
    900 }
    901 
    902 define <4 x i32> @test_vtrn2q_s32(<4 x i32> %a, <4 x i32> %b) {
    903 ; CHECK-LABEL: test_vtrn2q_s32:
    904 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    905 entry:
    906   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
    907   ret <4 x i32> %shuffle.i
    908 }
    909 
    910 define <2 x i64> @test_vtrn2q_s64(<2 x i64> %a, <2 x i64> %b) {
    911 ; CHECK-LABEL: test_vtrn2q_s64:
    912 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    913 entry:
    914   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
    915   ret <2 x i64> %shuffle.i
    916 }
    917 
    918 define <8 x i8> @test_vtrn2_u8(<8 x i8> %a, <8 x i8> %b) {
    919 ; CHECK-LABEL: test_vtrn2_u8:
    920 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    921 entry:
    922   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
    923   ret <8 x i8> %shuffle.i
    924 }
    925 
    926 define <16 x i8> @test_vtrn2q_u8(<16 x i8> %a, <16 x i8> %b) {
    927 ; CHECK-LABEL: test_vtrn2q_u8:
    928 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    929 entry:
    930   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
    931   ret <16 x i8> %shuffle.i
    932 }
    933 
    934 define <4 x i16> @test_vtrn2_u16(<4 x i16> %a, <4 x i16> %b) {
    935 ; CHECK-LABEL: test_vtrn2_u16:
    936 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    937 entry:
    938   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
    939   ret <4 x i16> %shuffle.i
    940 }
    941 
    942 define <8 x i16> @test_vtrn2q_u16(<8 x i16> %a, <8 x i16> %b) {
    943 ; CHECK-LABEL: test_vtrn2q_u16:
    944 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    945 entry:
    946   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
    947   ret <8 x i16> %shuffle.i
    948 }
    949 
    950 define <2 x i32> @test_vtrn2_u32(<2 x i32> %a, <2 x i32> %b) {
    951 ; CHECK-LABEL: test_vtrn2_u32:
    952 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    953 entry:
    954   %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
    955   ret <2 x i32> %shuffle.i
    956 }
    957 
    958 define <4 x i32> @test_vtrn2q_u32(<4 x i32> %a, <4 x i32> %b) {
    959 ; CHECK-LABEL: test_vtrn2q_u32:
    960 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    961 entry:
    962   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
    963   ret <4 x i32> %shuffle.i
    964 }
    965 
    966 define <2 x i64> @test_vtrn2q_u64(<2 x i64> %a, <2 x i64> %b) {
    967 ; CHECK-LABEL: test_vtrn2q_u64:
    968 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    969 entry:
    970   %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
    971   ret <2 x i64> %shuffle.i
    972 }
    973 
    974 define <2 x float> @test_vtrn2_f32(<2 x float> %a, <2 x float> %b) {
    975 ; CHECK-LABEL: test_vtrn2_f32:
    976 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    977 entry:
    978   %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
    979   ret <2 x float> %shuffle.i
    980 }
    981 
    982 define <4 x float> @test_vtrn2q_f32(<4 x float> %a, <4 x float> %b) {
    983 ; CHECK-LABEL: test_vtrn2q_f32:
    984 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    985 entry:
    986   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
    987   ret <4 x float> %shuffle.i
    988 }
    989 
    990 define <2 x double> @test_vtrn2q_f64(<2 x double> %a, <2 x double> %b) {
    991 ; CHECK-LABEL: test_vtrn2q_f64:
    992 ; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    993 entry:
    994   %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
    995   ret <2 x double> %shuffle.i
    996 }
    997 
    998 define <8 x i8> @test_vtrn2_p8(<8 x i8> %a, <8 x i8> %b) {
    999 ; CHECK-LABEL: test_vtrn2_p8:
   1000 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1001 entry:
   1002   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   1003   ret <8 x i8> %shuffle.i
   1004 }
   1005 
   1006 define <16 x i8> @test_vtrn2q_p8(<16 x i8> %a, <16 x i8> %b) {
   1007 ; CHECK-LABEL: test_vtrn2q_p8:
   1008 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1009 entry:
   1010   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   1011   ret <16 x i8> %shuffle.i
   1012 }
   1013 
   1014 define <4 x i16> @test_vtrn2_p16(<4 x i16> %a, <4 x i16> %b) {
   1015 ; CHECK-LABEL: test_vtrn2_p16:
   1016 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1017 entry:
   1018   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   1019   ret <4 x i16> %shuffle.i
   1020 }
   1021 
   1022 define <8 x i16> @test_vtrn2q_p16(<8 x i16> %a, <8 x i16> %b) {
   1023 ; CHECK-LABEL: test_vtrn2q_p16:
   1024 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1025 entry:
   1026   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   1027   ret <8 x i16> %shuffle.i
   1028 }
   1029 
   1030 define <8 x i8> @test_same_vuzp1_s8(<8 x i8> %a) {
   1031 ; CHECK-LABEL: test_same_vuzp1_s8:
   1032 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1033 entry:
   1034   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1035   ret <8 x i8> %shuffle.i
   1036 }
   1037 
   1038 define <16 x i8> @test_same_vuzp1q_s8(<16 x i8> %a) {
   1039 ; CHECK-LABEL: test_same_vuzp1q_s8:
   1040 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1041 entry:
   1042   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   1043   ret <16 x i8> %shuffle.i
   1044 }
   1045 
   1046 define <4 x i16> @test_same_vuzp1_s16(<4 x i16> %a) {
   1047 ; CHECK-LABEL: test_same_vuzp1_s16:
   1048 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1049 entry:
   1050   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1051   ret <4 x i16> %shuffle.i
   1052 }
   1053 
   1054 define <8 x i16> @test_same_vuzp1q_s16(<8 x i16> %a) {
   1055 ; CHECK-LABEL: test_same_vuzp1q_s16:
   1056 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1057 entry:
   1058   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1059   ret <8 x i16> %shuffle.i
   1060 }
   1061 
   1062 define <4 x i32> @test_same_vuzp1q_s32(<4 x i32> %a) {
   1063 ; CHECK-LABEL: test_same_vuzp1q_s32:
   1064 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1065 entry:
   1066   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1067   ret <4 x i32> %shuffle.i
   1068 }
   1069 
   1070 define <8 x i8> @test_same_vuzp1_u8(<8 x i8> %a) {
   1071 ; CHECK-LABEL: test_same_vuzp1_u8:
   1072 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1073 entry:
   1074   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1075   ret <8 x i8> %shuffle.i
   1076 }
   1077 
   1078 define <16 x i8> @test_same_vuzp1q_u8(<16 x i8> %a) {
   1079 ; CHECK-LABEL: test_same_vuzp1q_u8:
   1080 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1081 entry:
   1082   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   1083   ret <16 x i8> %shuffle.i
   1084 }
   1085 
   1086 define <4 x i16> @test_same_vuzp1_u16(<4 x i16> %a) {
   1087 ; CHECK-LABEL: test_same_vuzp1_u16:
   1088 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1089 entry:
   1090   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1091   ret <4 x i16> %shuffle.i
   1092 }
   1093 
   1094 define <8 x i16> @test_same_vuzp1q_u16(<8 x i16> %a) {
   1095 ; CHECK-LABEL: test_same_vuzp1q_u16:
   1096 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1097 entry:
   1098   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1099   ret <8 x i16> %shuffle.i
   1100 }
   1101 
   1102 define <4 x i32> @test_same_vuzp1q_u32(<4 x i32> %a) {
   1103 ; CHECK-LABEL: test_same_vuzp1q_u32:
   1104 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1105 entry:
   1106   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1107   ret <4 x i32> %shuffle.i
   1108 }
   1109 
   1110 define <4 x float> @test_same_vuzp1q_f32(<4 x float> %a) {
   1111 ; CHECK-LABEL: test_same_vuzp1q_f32:
   1112 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1113 entry:
   1114   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1115   ret <4 x float> %shuffle.i
   1116 }
   1117 
   1118 define <8 x i8> @test_same_vuzp1_p8(<8 x i8> %a) {
   1119 ; CHECK-LABEL: test_same_vuzp1_p8:
   1120 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1121 entry:
   1122   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1123   ret <8 x i8> %shuffle.i
   1124 }
   1125 
   1126 define <16 x i8> @test_same_vuzp1q_p8(<16 x i8> %a) {
   1127 ; CHECK-LABEL: test_same_vuzp1q_p8:
   1128 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1129 entry:
   1130   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   1131   ret <16 x i8> %shuffle.i
   1132 }
   1133 
   1134 define <4 x i16> @test_same_vuzp1_p16(<4 x i16> %a) {
   1135 ; CHECK-LABEL: test_same_vuzp1_p16:
   1136 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1137 entry:
   1138   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1139   ret <4 x i16> %shuffle.i
   1140 }
   1141 
   1142 define <8 x i16> @test_same_vuzp1q_p16(<8 x i16> %a) {
   1143 ; CHECK-LABEL: test_same_vuzp1q_p16:
   1144 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1145 entry:
   1146   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1147   ret <8 x i16> %shuffle.i
   1148 }
   1149 
   1150 define <8 x i8> @test_same_vuzp2_s8(<8 x i8> %a) {
   1151 ; CHECK-LABEL: test_same_vuzp2_s8:
   1152 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1153 entry:
   1154   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1155   ret <8 x i8> %shuffle.i
   1156 }
   1157 
   1158 define <16 x i8> @test_same_vuzp2q_s8(<16 x i8> %a) {
   1159 ; CHECK-LABEL: test_same_vuzp2q_s8:
   1160 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1161 entry:
   1162   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   1163   ret <16 x i8> %shuffle.i
   1164 }
   1165 
   1166 define <4 x i16> @test_same_vuzp2_s16(<4 x i16> %a) {
   1167 ; CHECK-LABEL: test_same_vuzp2_s16:
   1168 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1169 entry:
   1170   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1171   ret <4 x i16> %shuffle.i
   1172 }
   1173 
   1174 define <8 x i16> @test_same_vuzp2q_s16(<8 x i16> %a) {
   1175 ; CHECK-LABEL: test_same_vuzp2q_s16:
   1176 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1177 entry:
   1178   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1179   ret <8 x i16> %shuffle.i
   1180 }
   1181 
   1182 define <4 x i32> @test_same_vuzp2q_s32(<4 x i32> %a) {
   1183 ; CHECK-LABEL: test_same_vuzp2q_s32:
   1184 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1185 entry:
   1186   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1187   ret <4 x i32> %shuffle.i
   1188 }
   1189 
   1190 define <8 x i8> @test_same_vuzp2_u8(<8 x i8> %a) {
   1191 ; CHECK-LABEL: test_same_vuzp2_u8:
   1192 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1193 entry:
   1194   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1195   ret <8 x i8> %shuffle.i
   1196 }
   1197 
   1198 define <16 x i8> @test_same_vuzp2q_u8(<16 x i8> %a) {
   1199 ; CHECK-LABEL: test_same_vuzp2q_u8:
   1200 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1201 entry:
   1202   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   1203   ret <16 x i8> %shuffle.i
   1204 }
   1205 
   1206 define <4 x i16> @test_same_vuzp2_u16(<4 x i16> %a) {
   1207 ; CHECK-LABEL: test_same_vuzp2_u16:
   1208 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1209 entry:
   1210   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1211   ret <4 x i16> %shuffle.i
   1212 }
   1213 
   1214 define <8 x i16> @test_same_vuzp2q_u16(<8 x i16> %a) {
   1215 ; CHECK-LABEL: test_same_vuzp2q_u16:
   1216 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1217 entry:
   1218   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1219   ret <8 x i16> %shuffle.i
   1220 }
   1221 
   1222 define <4 x i32> @test_same_vuzp2q_u32(<4 x i32> %a) {
   1223 ; CHECK-LABEL: test_same_vuzp2q_u32:
   1224 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1225 entry:
   1226   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1227   ret <4 x i32> %shuffle.i
   1228 }
   1229 
   1230 define <4 x float> @test_same_vuzp2q_f32(<4 x float> %a) {
   1231 ; CHECK-LABEL: test_same_vuzp2q_f32:
   1232 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1233 entry:
   1234   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1235   ret <4 x float> %shuffle.i
   1236 }
   1237 
   1238 define <8 x i8> @test_same_vuzp2_p8(<8 x i8> %a) {
   1239 ; CHECK-LABEL: test_same_vuzp2_p8:
   1240 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1241 entry:
   1242   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1243   ret <8 x i8> %shuffle.i
   1244 }
   1245 
   1246 define <16 x i8> @test_same_vuzp2q_p8(<16 x i8> %a) {
   1247 ; CHECK-LABEL: test_same_vuzp2q_p8:
   1248 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1249 entry:
   1250   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   1251   ret <16 x i8> %shuffle.i
   1252 }
   1253 
   1254 define <4 x i16> @test_same_vuzp2_p16(<4 x i16> %a) {
   1255 ; CHECK-LABEL: test_same_vuzp2_p16:
   1256 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1257 entry:
   1258   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1259   ret <4 x i16> %shuffle.i
   1260 }
   1261 
   1262 define <8 x i16> @test_same_vuzp2q_p16(<8 x i16> %a) {
   1263 ; CHECK-LABEL: test_same_vuzp2q_p16:
   1264 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1265 entry:
   1266   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1267   ret <8 x i16> %shuffle.i
   1268 }
   1269 
   1270 define <8 x i8> @test_same_vzip1_s8(<8 x i8> %a) {
   1271 ; CHECK-LABEL: test_same_vzip1_s8:
   1272 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1273 entry:
   1274   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   1275   ret <8 x i8> %shuffle.i
   1276 }
   1277 
   1278 define <16 x i8> @test_same_vzip1q_s8(<16 x i8> %a) {
   1279 ; CHECK-LABEL: test_same_vzip1q_s8:
   1280 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1281 entry:
   1282   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   1283   ret <16 x i8> %shuffle.i
   1284 }
   1285 
   1286 define <4 x i16> @test_same_vzip1_s16(<4 x i16> %a) {
   1287 ; CHECK-LABEL: test_same_vzip1_s16:
   1288 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1289 entry:
   1290   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   1291   ret <4 x i16> %shuffle.i
   1292 }
   1293 
   1294 define <8 x i16> @test_same_vzip1q_s16(<8 x i16> %a) {
   1295 ; CHECK-LABEL: test_same_vzip1q_s16:
   1296 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1297 entry:
   1298   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   1299   ret <8 x i16> %shuffle.i
   1300 }
   1301 
   1302 define <4 x i32> @test_same_vzip1q_s32(<4 x i32> %a) {
   1303 ; CHECK-LABEL: test_same_vzip1q_s32:
   1304 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1305 entry:
   1306   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   1307   ret <4 x i32> %shuffle.i
   1308 }
   1309 
   1310 define <8 x i8> @test_same_vzip1_u8(<8 x i8> %a) {
   1311 ; CHECK-LABEL: test_same_vzip1_u8:
   1312 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1313 entry:
   1314   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   1315   ret <8 x i8> %shuffle.i
   1316 }
   1317 
   1318 define <16 x i8> @test_same_vzip1q_u8(<16 x i8> %a) {
   1319 ; CHECK-LABEL: test_same_vzip1q_u8:
   1320 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1321 entry:
   1322   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   1323   ret <16 x i8> %shuffle.i
   1324 }
   1325 
   1326 define <4 x i16> @test_same_vzip1_u16(<4 x i16> %a) {
   1327 ; CHECK-LABEL: test_same_vzip1_u16:
   1328 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1329 entry:
   1330   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   1331   ret <4 x i16> %shuffle.i
   1332 }
   1333 
   1334 define <8 x i16> @test_same_vzip1q_u16(<8 x i16> %a) {
   1335 ; CHECK-LABEL: test_same_vzip1q_u16:
   1336 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1337 entry:
   1338   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   1339   ret <8 x i16> %shuffle.i
   1340 }
   1341 
   1342 define <4 x i32> @test_same_vzip1q_u32(<4 x i32> %a) {
   1343 ; CHECK-LABEL: test_same_vzip1q_u32:
   1344 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1345 entry:
   1346   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   1347   ret <4 x i32> %shuffle.i
   1348 }
   1349 
   1350 define <4 x float> @test_same_vzip1q_f32(<4 x float> %a) {
   1351 ; CHECK-LABEL: test_same_vzip1q_f32:
   1352 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1353 entry:
   1354   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   1355   ret <4 x float> %shuffle.i
   1356 }
   1357 
   1358 define <8 x i8> @test_same_vzip1_p8(<8 x i8> %a) {
   1359 ; CHECK-LABEL: test_same_vzip1_p8:
   1360 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1361 entry:
   1362   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   1363   ret <8 x i8> %shuffle.i
   1364 }
   1365 
   1366 define <16 x i8> @test_same_vzip1q_p8(<16 x i8> %a) {
   1367 ; CHECK-LABEL: test_same_vzip1q_p8:
   1368 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1369 entry:
   1370   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   1371   ret <16 x i8> %shuffle.i
   1372 }
   1373 
   1374 define <4 x i16> @test_same_vzip1_p16(<4 x i16> %a) {
   1375 ; CHECK-LABEL: test_same_vzip1_p16:
   1376 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1377 entry:
   1378   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   1379   ret <4 x i16> %shuffle.i
   1380 }
   1381 
   1382 define <8 x i16> @test_same_vzip1q_p16(<8 x i16> %a) {
   1383 ; CHECK-LABEL: test_same_vzip1q_p16:
   1384 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1385 entry:
   1386   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   1387   ret <8 x i16> %shuffle.i
   1388 }
   1389 
   1390 define <8 x i8> @test_same_vzip2_s8(<8 x i8> %a) {
   1391 ; CHECK-LABEL: test_same_vzip2_s8:
   1392 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1393 entry:
   1394   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   1395   ret <8 x i8> %shuffle.i
   1396 }
   1397 
   1398 define <16 x i8> @test_same_vzip2q_s8(<16 x i8> %a) {
   1399 ; CHECK-LABEL: test_same_vzip2q_s8:
   1400 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1401 entry:
   1402   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   1403   ret <16 x i8> %shuffle.i
   1404 }
   1405 
   1406 define <4 x i16> @test_same_vzip2_s16(<4 x i16> %a) {
   1407 ; CHECK-LABEL: test_same_vzip2_s16:
   1408 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1409 entry:
   1410   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   1411   ret <4 x i16> %shuffle.i
   1412 }
   1413 
   1414 define <8 x i16> @test_same_vzip2q_s16(<8 x i16> %a) {
   1415 ; CHECK-LABEL: test_same_vzip2q_s16:
   1416 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1417 entry:
   1418   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   1419   ret <8 x i16> %shuffle.i
   1420 }
   1421 
   1422 define <4 x i32> @test_same_vzip2q_s32(<4 x i32> %a) {
   1423 ; CHECK-LABEL: test_same_vzip2q_s32:
   1424 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1425 entry:
   1426   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   1427   ret <4 x i32> %shuffle.i
   1428 }
   1429 
   1430 define <8 x i8> @test_same_vzip2_u8(<8 x i8> %a) {
   1431 ; CHECK-LABEL: test_same_vzip2_u8:
   1432 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1433 entry:
   1434   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   1435   ret <8 x i8> %shuffle.i
   1436 }
   1437 
   1438 define <16 x i8> @test_same_vzip2q_u8(<16 x i8> %a) {
   1439 ; CHECK-LABEL: test_same_vzip2q_u8:
   1440 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1441 entry:
   1442   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   1443   ret <16 x i8> %shuffle.i
   1444 }
   1445 
   1446 define <4 x i16> @test_same_vzip2_u16(<4 x i16> %a) {
   1447 ; CHECK-LABEL: test_same_vzip2_u16:
   1448 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1449 entry:
   1450   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   1451   ret <4 x i16> %shuffle.i
   1452 }
   1453 
   1454 define <8 x i16> @test_same_vzip2q_u16(<8 x i16> %a) {
   1455 ; CHECK-LABEL: test_same_vzip2q_u16:
   1456 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1457 entry:
   1458   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   1459   ret <8 x i16> %shuffle.i
   1460 }
   1461 
   1462 define <4 x i32> @test_same_vzip2q_u32(<4 x i32> %a) {
   1463 ; CHECK-LABEL: test_same_vzip2q_u32:
   1464 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1465 entry:
   1466   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   1467   ret <4 x i32> %shuffle.i
   1468 }
   1469 
   1470 define <4 x float> @test_same_vzip2q_f32(<4 x float> %a) {
   1471 ; CHECK-LABEL: test_same_vzip2q_f32:
   1472 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1473 entry:
   1474   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   1475   ret <4 x float> %shuffle.i
   1476 }
   1477 
   1478 define <8 x i8> @test_same_vzip2_p8(<8 x i8> %a) {
   1479 ; CHECK-LABEL: test_same_vzip2_p8:
   1480 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1481 entry:
   1482   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   1483   ret <8 x i8> %shuffle.i
   1484 }
   1485 
   1486 define <16 x i8> @test_same_vzip2q_p8(<16 x i8> %a) {
   1487 ; CHECK-LABEL: test_same_vzip2q_p8:
   1488 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1489 entry:
   1490   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   1491   ret <16 x i8> %shuffle.i
   1492 }
   1493 
   1494 define <4 x i16> @test_same_vzip2_p16(<4 x i16> %a) {
   1495 ; CHECK-LABEL: test_same_vzip2_p16:
   1496 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1497 entry:
   1498   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   1499   ret <4 x i16> %shuffle.i
   1500 }
   1501 
   1502 define <8 x i16> @test_same_vzip2q_p16(<8 x i16> %a) {
   1503 ; CHECK-LABEL: test_same_vzip2q_p16:
   1504 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1505 entry:
   1506   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   1507   ret <8 x i16> %shuffle.i
   1508 }
   1509 
   1510 define <8 x i8> @test_same_vtrn1_s8(<8 x i8> %a) {
   1511 ; CHECK-LABEL: test_same_vtrn1_s8:
   1512 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1513 entry:
   1514   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   1515   ret <8 x i8> %shuffle.i
   1516 }
   1517 
   1518 define <16 x i8> @test_same_vtrn1q_s8(<16 x i8> %a) {
   1519 ; CHECK-LABEL: test_same_vtrn1q_s8:
   1520 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1521 entry:
   1522   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   1523   ret <16 x i8> %shuffle.i
   1524 }
   1525 
   1526 define <4 x i16> @test_same_vtrn1_s16(<4 x i16> %a) {
   1527 ; CHECK-LABEL: test_same_vtrn1_s16:
   1528 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1529 entry:
   1530   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   1531   ret <4 x i16> %shuffle.i
   1532 }
   1533 
   1534 define <8 x i16> @test_same_vtrn1q_s16(<8 x i16> %a) {
   1535 ; CHECK-LABEL: test_same_vtrn1q_s16:
   1536 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1537 entry:
   1538   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   1539   ret <8 x i16> %shuffle.i
   1540 }
   1541 
   1542 define <4 x i32> @test_same_vtrn1q_s32(<4 x i32> %a) {
   1543 ; CHECK-LABEL: test_same_vtrn1q_s32:
   1544 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1545 entry:
   1546   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   1547   ret <4 x i32> %shuffle.i
   1548 }
   1549 
   1550 define <8 x i8> @test_same_vtrn1_u8(<8 x i8> %a) {
   1551 ; CHECK-LABEL: test_same_vtrn1_u8:
   1552 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1553 entry:
   1554   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   1555   ret <8 x i8> %shuffle.i
   1556 }
   1557 
   1558 define <16 x i8> @test_same_vtrn1q_u8(<16 x i8> %a) {
   1559 ; CHECK-LABEL: test_same_vtrn1q_u8:
   1560 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1561 entry:
   1562   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   1563   ret <16 x i8> %shuffle.i
   1564 }
   1565 
   1566 define <4 x i16> @test_same_vtrn1_u16(<4 x i16> %a) {
   1567 ; CHECK-LABEL: test_same_vtrn1_u16:
   1568 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1569 entry:
   1570   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   1571   ret <4 x i16> %shuffle.i
   1572 }
   1573 
   1574 define <8 x i16> @test_same_vtrn1q_u16(<8 x i16> %a) {
   1575 ; CHECK-LABEL: test_same_vtrn1q_u16:
   1576 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1577 entry:
   1578   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   1579   ret <8 x i16> %shuffle.i
   1580 }
   1581 
   1582 define <4 x i32> @test_same_vtrn1q_u32(<4 x i32> %a) {
   1583 ; CHECK-LABEL: test_same_vtrn1q_u32:
   1584 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1585 entry:
   1586   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   1587   ret <4 x i32> %shuffle.i
   1588 }
   1589 
   1590 define <4 x float> @test_same_vtrn1q_f32(<4 x float> %a) {
   1591 ; CHECK-LABEL: test_same_vtrn1q_f32:
   1592 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1593 entry:
   1594   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   1595   ret <4 x float> %shuffle.i
   1596 }
   1597 
   1598 define <8 x i8> @test_same_vtrn1_p8(<8 x i8> %a) {
   1599 ; CHECK-LABEL: test_same_vtrn1_p8:
   1600 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1601 entry:
   1602   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   1603   ret <8 x i8> %shuffle.i
   1604 }
   1605 
   1606 define <16 x i8> @test_same_vtrn1q_p8(<16 x i8> %a) {
   1607 ; CHECK-LABEL: test_same_vtrn1q_p8:
   1608 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1609 entry:
   1610   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   1611   ret <16 x i8> %shuffle.i
   1612 }
   1613 
   1614 define <4 x i16> @test_same_vtrn1_p16(<4 x i16> %a) {
   1615 ; CHECK-LABEL: test_same_vtrn1_p16:
   1616 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1617 entry:
   1618   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   1619   ret <4 x i16> %shuffle.i
   1620 }
   1621 
   1622 define <8 x i16> @test_same_vtrn1q_p16(<8 x i16> %a) {
   1623 ; CHECK-LABEL: test_same_vtrn1q_p16:
   1624 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1625 entry:
   1626   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   1627   ret <8 x i16> %shuffle.i
   1628 }
   1629 
   1630 define <8 x i8> @test_same_vtrn2_s8(<8 x i8> %a) {
   1631 ; CHECK-LABEL: test_same_vtrn2_s8:
   1632 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1633 entry:
   1634   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   1635   ret <8 x i8> %shuffle.i
   1636 }
   1637 
   1638 define <16 x i8> @test_same_vtrn2q_s8(<16 x i8> %a) {
   1639 ; CHECK-LABEL: test_same_vtrn2q_s8:
   1640 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1641 entry:
   1642   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   1643   ret <16 x i8> %shuffle.i
   1644 }
   1645 
   1646 define <4 x i16> @test_same_vtrn2_s16(<4 x i16> %a) {
   1647 ; CHECK-LABEL: test_same_vtrn2_s16:
   1648 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1649 entry:
   1650   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   1651   ret <4 x i16> %shuffle.i
   1652 }
   1653 
   1654 define <8 x i16> @test_same_vtrn2q_s16(<8 x i16> %a) {
   1655 ; CHECK-LABEL: test_same_vtrn2q_s16:
   1656 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1657 entry:
   1658   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   1659   ret <8 x i16> %shuffle.i
   1660 }
   1661 
   1662 define <4 x i32> @test_same_vtrn2q_s32(<4 x i32> %a) {
   1663 ; CHECK-LABEL: test_same_vtrn2q_s32:
   1664 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1665 entry:
   1666   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   1667   ret <4 x i32> %shuffle.i
   1668 }
   1669 
   1670 define <8 x i8> @test_same_vtrn2_u8(<8 x i8> %a) {
   1671 ; CHECK-LABEL: test_same_vtrn2_u8:
   1672 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1673 entry:
   1674   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   1675   ret <8 x i8> %shuffle.i
   1676 }
   1677 
   1678 define <16 x i8> @test_same_vtrn2q_u8(<16 x i8> %a) {
   1679 ; CHECK-LABEL: test_same_vtrn2q_u8:
   1680 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1681 entry:
   1682   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   1683   ret <16 x i8> %shuffle.i
   1684 }
   1685 
   1686 define <4 x i16> @test_same_vtrn2_u16(<4 x i16> %a) {
   1687 ; CHECK-LABEL: test_same_vtrn2_u16:
   1688 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1689 entry:
   1690   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   1691   ret <4 x i16> %shuffle.i
   1692 }
   1693 
   1694 define <8 x i16> @test_same_vtrn2q_u16(<8 x i16> %a) {
   1695 ; CHECK-LABEL: test_same_vtrn2q_u16:
   1696 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1697 entry:
   1698   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   1699   ret <8 x i16> %shuffle.i
   1700 }
   1701 
   1702 define <4 x i32> @test_same_vtrn2q_u32(<4 x i32> %a) {
   1703 ; CHECK-LABEL: test_same_vtrn2q_u32:
   1704 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1705 entry:
   1706   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   1707   ret <4 x i32> %shuffle.i
   1708 }
   1709 
   1710 define <4 x float> @test_same_vtrn2q_f32(<4 x float> %a) {
   1711 ; CHECK-LABEL: test_same_vtrn2q_f32:
   1712 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1713 entry:
   1714   %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   1715   ret <4 x float> %shuffle.i
   1716 }
   1717 
   1718 define <8 x i8> @test_same_vtrn2_p8(<8 x i8> %a) {
   1719 ; CHECK-LABEL: test_same_vtrn2_p8:
   1720 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1721 entry:
   1722   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   1723   ret <8 x i8> %shuffle.i
   1724 }
   1725 
   1726 define <16 x i8> @test_same_vtrn2q_p8(<16 x i8> %a) {
   1727 ; CHECK-LABEL: test_same_vtrn2q_p8:
   1728 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1729 entry:
   1730   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   1731   ret <16 x i8> %shuffle.i
   1732 }
   1733 
   1734 define <4 x i16> @test_same_vtrn2_p16(<4 x i16> %a) {
   1735 ; CHECK-LABEL: test_same_vtrn2_p16:
   1736 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1737 entry:
   1738   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   1739   ret <4 x i16> %shuffle.i
   1740 }
   1741 
   1742 define <8 x i16> @test_same_vtrn2q_p16(<8 x i16> %a) {
   1743 ; CHECK-LABEL: test_same_vtrn2q_p16:
   1744 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1745 entry:
   1746   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   1747   ret <8 x i16> %shuffle.i
   1748 }
   1749 
   1750 
   1751 define <8 x i8> @test_undef_vuzp1_s8(<8 x i8> %a) {
   1752 ; CHECK-LABEL: test_undef_vuzp1_s8:
   1753 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1754 entry:
   1755   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1756   ret <8 x i8> %shuffle.i
   1757 }
   1758 
   1759 define <16 x i8> @test_undef_vuzp1q_s8(<16 x i8> %a) {
   1760 ; CHECK-LABEL: test_undef_vuzp1q_s8:
   1761 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1762 entry:
   1763   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   1764   ret <16 x i8> %shuffle.i
   1765 }
   1766 
   1767 define <4 x i16> @test_undef_vuzp1_s16(<4 x i16> %a) {
   1768 ; CHECK-LABEL: test_undef_vuzp1_s16:
   1769 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1770 entry:
   1771   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1772   ret <4 x i16> %shuffle.i
   1773 }
   1774 
   1775 define <8 x i16> @test_undef_vuzp1q_s16(<8 x i16> %a) {
   1776 ; CHECK-LABEL: test_undef_vuzp1q_s16:
   1777 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1778 entry:
   1779   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1780   ret <8 x i16> %shuffle.i
   1781 }
   1782 
   1783 define <4 x i32> @test_undef_vuzp1q_s32(<4 x i32> %a) {
   1784 ; CHECK-LABEL: test_undef_vuzp1q_s32:
   1785 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1786 entry:
   1787   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1788   ret <4 x i32> %shuffle.i
   1789 }
   1790 
   1791 define <8 x i8> @test_undef_vuzp1_u8(<8 x i8> %a) {
   1792 ; CHECK-LABEL: test_undef_vuzp1_u8:
   1793 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1794 entry:
   1795   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1796   ret <8 x i8> %shuffle.i
   1797 }
   1798 
   1799 define <16 x i8> @test_undef_vuzp1q_u8(<16 x i8> %a) {
   1800 ; CHECK-LABEL: test_undef_vuzp1q_u8:
   1801 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1802 entry:
   1803   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   1804   ret <16 x i8> %shuffle.i
   1805 }
   1806 
   1807 define <4 x i16> @test_undef_vuzp1_u16(<4 x i16> %a) {
   1808 ; CHECK-LABEL: test_undef_vuzp1_u16:
   1809 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1810 entry:
   1811   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1812   ret <4 x i16> %shuffle.i
   1813 }
   1814 
   1815 define <8 x i16> @test_undef_vuzp1q_u16(<8 x i16> %a) {
   1816 ; CHECK-LABEL: test_undef_vuzp1q_u16:
   1817 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1818 entry:
   1819   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1820   ret <8 x i16> %shuffle.i
   1821 }
   1822 
   1823 define <4 x i32> @test_undef_vuzp1q_u32(<4 x i32> %a) {
   1824 ; CHECK-LABEL: test_undef_vuzp1q_u32:
   1825 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1826 entry:
   1827   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1828   ret <4 x i32> %shuffle.i
   1829 }
   1830 
   1831 define <4 x float> @test_undef_vuzp1q_f32(<4 x float> %a) {
   1832 ; CHECK-LABEL: test_undef_vuzp1q_f32:
   1833 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1834 entry:
   1835   %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1836   ret <4 x float> %shuffle.i
   1837 }
   1838 
   1839 define <8 x i8> @test_undef_vuzp1_p8(<8 x i8> %a) {
   1840 ; CHECK-LABEL: test_undef_vuzp1_p8:
   1841 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1842 entry:
   1843   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1844   ret <8 x i8> %shuffle.i
   1845 }
   1846 
   1847 define <16 x i8> @test_undef_vuzp1q_p8(<16 x i8> %a) {
   1848 ; CHECK-LABEL: test_undef_vuzp1q_p8:
   1849 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1850 entry:
   1851   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   1852   ret <16 x i8> %shuffle.i
   1853 }
   1854 
   1855 define <4 x i16> @test_undef_vuzp1_p16(<4 x i16> %a) {
   1856 ; CHECK-LABEL: test_undef_vuzp1_p16:
   1857 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1858 entry:
   1859   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   1860   ret <4 x i16> %shuffle.i
   1861 }
   1862 
   1863 define <8 x i16> @test_undef_vuzp1q_p16(<8 x i16> %a) {
   1864 ; CHECK-LABEL: test_undef_vuzp1q_p16:
   1865 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1866 entry:
   1867   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   1868   ret <8 x i16> %shuffle.i
   1869 }
   1870 
   1871 define <8 x i8> @test_undef_vuzp2_s8(<8 x i8> %a) {
   1872 ; CHECK-LABEL: test_undef_vuzp2_s8:
   1873 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1874 entry:
   1875   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1876   ret <8 x i8> %shuffle.i
   1877 }
   1878 
   1879 define <16 x i8> @test_undef_vuzp2q_s8(<16 x i8> %a) {
   1880 ; CHECK-LABEL: test_undef_vuzp2q_s8:
   1881 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1882 entry:
   1883   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   1884   ret <16 x i8> %shuffle.i
   1885 }
   1886 
   1887 define <4 x i16> @test_undef_vuzp2_s16(<4 x i16> %a) {
   1888 ; CHECK-LABEL: test_undef_vuzp2_s16:
   1889 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1890 entry:
   1891   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1892   ret <4 x i16> %shuffle.i
   1893 }
   1894 
   1895 define <8 x i16> @test_undef_vuzp2q_s16(<8 x i16> %a) {
   1896 ; CHECK-LABEL: test_undef_vuzp2q_s16:
   1897 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1898 entry:
   1899   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1900   ret <8 x i16> %shuffle.i
   1901 }
   1902 
   1903 define <4 x i32> @test_undef_vuzp2q_s32(<4 x i32> %a) {
   1904 ; CHECK-LABEL: test_undef_vuzp2q_s32:
   1905 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1906 entry:
   1907   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1908   ret <4 x i32> %shuffle.i
   1909 }
   1910 
   1911 define <8 x i8> @test_undef_vuzp2_u8(<8 x i8> %a) {
   1912 ; CHECK-LABEL: test_undef_vuzp2_u8:
   1913 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1914 entry:
   1915   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1916   ret <8 x i8> %shuffle.i
   1917 }
   1918 
   1919 define <16 x i8> @test_undef_vuzp2q_u8(<16 x i8> %a) {
   1920 ; CHECK-LABEL: test_undef_vuzp2q_u8:
   1921 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1922 entry:
   1923   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   1924   ret <16 x i8> %shuffle.i
   1925 }
   1926 
   1927 define <4 x i16> @test_undef_vuzp2_u16(<4 x i16> %a) {
   1928 ; CHECK-LABEL: test_undef_vuzp2_u16:
   1929 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1930 entry:
   1931   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1932   ret <4 x i16> %shuffle.i
   1933 }
   1934 
   1935 define <8 x i16> @test_undef_vuzp2q_u16(<8 x i16> %a) {
   1936 ; CHECK-LABEL: test_undef_vuzp2q_u16:
   1937 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1938 entry:
   1939   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1940   ret <8 x i16> %shuffle.i
   1941 }
   1942 
   1943 define <4 x i32> @test_undef_vuzp2q_u32(<4 x i32> %a) {
   1944 ; CHECK-LABEL: test_undef_vuzp2q_u32:
   1945 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1946 entry:
   1947   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1948   ret <4 x i32> %shuffle.i
   1949 }
   1950 
   1951 define <4 x float> @test_undef_vuzp2q_f32(<4 x float> %a) {
   1952 ; CHECK-LABEL: test_undef_vuzp2q_f32:
   1953 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1954 entry:
   1955   %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1956   ret <4 x float> %shuffle.i
   1957 }
   1958 
   1959 define <8 x i8> @test_undef_vuzp2_p8(<8 x i8> %a) {
   1960 ; CHECK-LABEL: test_undef_vuzp2_p8:
   1961 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1962 entry:
   1963   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1964   ret <8 x i8> %shuffle.i
   1965 }
   1966 
   1967 define <16 x i8> @test_undef_vuzp2q_p8(<16 x i8> %a) {
   1968 ; CHECK-LABEL: test_undef_vuzp2q_p8:
   1969 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1970 entry:
   1971   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   1972   ret <16 x i8> %shuffle.i
   1973 }
   1974 
   1975 define <4 x i16> @test_undef_vuzp2_p16(<4 x i16> %a) {
   1976 ; CHECK-LABEL: test_undef_vuzp2_p16:
   1977 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1978 entry:
   1979   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   1980   ret <4 x i16> %shuffle.i
   1981 }
   1982 
   1983 define <8 x i16> @test_undef_vuzp2q_p16(<8 x i16> %a) {
   1984 ; CHECK-LABEL: test_undef_vuzp2q_p16:
   1985 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1986 entry:
   1987   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   1988   ret <8 x i16> %shuffle.i
   1989 }
   1990 
   1991 define <8 x i8> @test_undef_vzip1_s8(<8 x i8> %a) {
   1992 ; CHECK-LABEL: test_undef_vzip1_s8:
   1993 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1994 entry:
   1995   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   1996   ret <8 x i8> %shuffle.i
   1997 }
   1998 
   1999 define <16 x i8> @test_undef_vzip1q_s8(<16 x i8> %a) {
   2000 ; CHECK-LABEL: test_undef_vzip1q_s8:
   2001 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2002 entry:
   2003   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   2004   ret <16 x i8> %shuffle.i
   2005 }
   2006 
   2007 define <4 x i16> @test_undef_vzip1_s16(<4 x i16> %a) {
   2008 ; CHECK-LABEL: test_undef_vzip1_s16:
   2009 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2010 entry:
   2011   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2012   ret <4 x i16> %shuffle.i
   2013 }
   2014 
   2015 define <8 x i16> @test_undef_vzip1q_s16(<8 x i16> %a) {
   2016 ; CHECK-LABEL: test_undef_vzip1q_s16:
   2017 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2018 entry:
   2019   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2020   ret <8 x i16> %shuffle.i
   2021 }
   2022 
   2023 define <4 x i32> @test_undef_vzip1q_s32(<4 x i32> %a) {
   2024 ; CHECK-LABEL: test_undef_vzip1q_s32:
   2025 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2026 entry:
   2027   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2028   ret <4 x i32> %shuffle.i
   2029 }
   2030 
   2031 define <8 x i8> @test_undef_vzip1_u8(<8 x i8> %a) {
   2032 ; CHECK-LABEL: test_undef_vzip1_u8:
   2033 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2034 entry:
   2035   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2036   ret <8 x i8> %shuffle.i
   2037 }
   2038 
   2039 define <16 x i8> @test_undef_vzip1q_u8(<16 x i8> %a) {
   2040 ; CHECK-LABEL: test_undef_vzip1q_u8:
   2041 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2042 entry:
   2043   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   2044   ret <16 x i8> %shuffle.i
   2045 }
   2046 
   2047 define <4 x i16> @test_undef_vzip1_u16(<4 x i16> %a) {
   2048 ; CHECK-LABEL: test_undef_vzip1_u16:
   2049 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2050 entry:
   2051   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2052   ret <4 x i16> %shuffle.i
   2053 }
   2054 
   2055 define <8 x i16> @test_undef_vzip1q_u16(<8 x i16> %a) {
   2056 ; CHECK-LABEL: test_undef_vzip1q_u16:
   2057 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2058 entry:
   2059   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2060   ret <8 x i16> %shuffle.i
   2061 }
   2062 
   2063 define <4 x i32> @test_undef_vzip1q_u32(<4 x i32> %a) {
   2064 ; CHECK-LABEL: test_undef_vzip1q_u32:
   2065 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2066 entry:
   2067   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2068   ret <4 x i32> %shuffle.i
   2069 }
   2070 
   2071 define <4 x float> @test_undef_vzip1q_f32(<4 x float> %a) {
   2072 ; CHECK-LABEL: test_undef_vzip1q_f32:
   2073 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2074 entry:
   2075   %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2076   ret <4 x float> %shuffle.i
   2077 }
   2078 
   2079 define <8 x i8> @test_undef_vzip1_p8(<8 x i8> %a) {
   2080 ; CHECK-LABEL: test_undef_vzip1_p8:
   2081 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2082 entry:
   2083   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2084   ret <8 x i8> %shuffle.i
   2085 }
   2086 
   2087 define <16 x i8> @test_undef_vzip1q_p8(<16 x i8> %a) {
   2088 ; CHECK-LABEL: test_undef_vzip1q_p8:
   2089 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2090 entry:
   2091   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   2092   ret <16 x i8> %shuffle.i
   2093 }
   2094 
   2095 define <4 x i16> @test_undef_vzip1_p16(<4 x i16> %a) {
   2096 ; CHECK-LABEL: test_undef_vzip1_p16:
   2097 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2098 entry:
   2099   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2100   ret <4 x i16> %shuffle.i
   2101 }
   2102 
   2103 define <8 x i16> @test_undef_vzip1q_p16(<8 x i16> %a) {
   2104 ; CHECK-LABEL: test_undef_vzip1q_p16:
   2105 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2106 entry:
   2107   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2108   ret <8 x i16> %shuffle.i
   2109 }
   2110 
   2111 define <8 x i8> @test_undef_vzip2_s8(<8 x i8> %a) {
   2112 ; CHECK-LABEL: test_undef_vzip2_s8:
   2113 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2114 entry:
   2115   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2116   ret <8 x i8> %shuffle.i
   2117 }
   2118 
   2119 define <16 x i8> @test_undef_vzip2q_s8(<16 x i8> %a) {
   2120 ; CHECK-LABEL: test_undef_vzip2q_s8:
   2121 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2122 entry:
   2123   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   2124   ret <16 x i8> %shuffle.i
   2125 }
   2126 
   2127 define <4 x i16> @test_undef_vzip2_s16(<4 x i16> %a) {
   2128 ; CHECK-LABEL: test_undef_vzip2_s16:
   2129 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2130 entry:
   2131   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2132   ret <4 x i16> %shuffle.i
   2133 }
   2134 
   2135 define <8 x i16> @test_undef_vzip2q_s16(<8 x i16> %a) {
   2136 ; CHECK-LABEL: test_undef_vzip2q_s16:
   2137 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2138 entry:
   2139   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2140   ret <8 x i16> %shuffle.i
   2141 }
   2142 
   2143 define <4 x i32> @test_undef_vzip2q_s32(<4 x i32> %a) {
   2144 ; CHECK-LABEL: test_undef_vzip2q_s32:
   2145 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2146 entry:
   2147   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2148   ret <4 x i32> %shuffle.i
   2149 }
   2150 
   2151 define <8 x i8> @test_undef_vzip2_u8(<8 x i8> %a) {
   2152 ; CHECK-LABEL: test_undef_vzip2_u8:
   2153 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2154 entry:
   2155   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2156   ret <8 x i8> %shuffle.i
   2157 }
   2158 
   2159 define <16 x i8> @test_undef_vzip2q_u8(<16 x i8> %a) {
   2160 ; CHECK-LABEL: test_undef_vzip2q_u8:
   2161 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2162 entry:
   2163   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   2164   ret <16 x i8> %shuffle.i
   2165 }
   2166 
   2167 define <4 x i16> @test_undef_vzip2_u16(<4 x i16> %a) {
   2168 ; CHECK-LABEL: test_undef_vzip2_u16:
   2169 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2170 entry:
   2171   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2172   ret <4 x i16> %shuffle.i
   2173 }
   2174 
   2175 define <8 x i16> @test_undef_vzip2q_u16(<8 x i16> %a) {
   2176 ; CHECK-LABEL: test_undef_vzip2q_u16:
   2177 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2178 entry:
   2179   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2180   ret <8 x i16> %shuffle.i
   2181 }
   2182 
   2183 define <4 x i32> @test_undef_vzip2q_u32(<4 x i32> %a) {
   2184 ; CHECK-LABEL: test_undef_vzip2q_u32:
   2185 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2186 entry:
   2187   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2188   ret <4 x i32> %shuffle.i
   2189 }
   2190 
   2191 define <4 x float> @test_undef_vzip2q_f32(<4 x float> %a) {
   2192 ; CHECK-LABEL: test_undef_vzip2q_f32:
   2193 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2194 entry:
   2195   %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2196   ret <4 x float> %shuffle.i
   2197 }
   2198 
   2199 define <8 x i8> @test_undef_vzip2_p8(<8 x i8> %a) {
   2200 ; CHECK-LABEL: test_undef_vzip2_p8:
   2201 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2202 entry:
   2203   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2204   ret <8 x i8> %shuffle.i
   2205 }
   2206 
   2207 define <16 x i8> @test_undef_vzip2q_p8(<16 x i8> %a) {
   2208 ; CHECK-LABEL: test_undef_vzip2q_p8:
   2209 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2210 entry:
   2211   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   2212   ret <16 x i8> %shuffle.i
   2213 }
   2214 
   2215 define <4 x i16> @test_undef_vzip2_p16(<4 x i16> %a) {
   2216 ; CHECK-LABEL: test_undef_vzip2_p16:
   2217 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2218 entry:
   2219   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2220   ret <4 x i16> %shuffle.i
   2221 }
   2222 
   2223 define <8 x i16> @test_undef_vzip2q_p16(<8 x i16> %a) {
   2224 ; CHECK-LABEL: test_undef_vzip2q_p16:
   2225 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2226 entry:
   2227   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2228   ret <8 x i16> %shuffle.i
   2229 }
   2230 
   2231 define <8 x i8> @test_undef_vtrn1_s8(<8 x i8> %a) {
   2232 ; CHECK-LABEL: test_undef_vtrn1_s8:
   2233 ; CHECK: ret
   2234 entry:
   2235   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2236   ret <8 x i8> %shuffle.i
   2237 }
   2238 
   2239 define <16 x i8> @test_undef_vtrn1q_s8(<16 x i8> %a) {
   2240 ; CHECK-LABEL: test_undef_vtrn1q_s8:
   2241 ; CHECK: ret
   2242 entry:
   2243   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   2244   ret <16 x i8> %shuffle.i
   2245 }
   2246 
   2247 define <4 x i16> @test_undef_vtrn1_s16(<4 x i16> %a) {
   2248 ; CHECK-LABEL: test_undef_vtrn1_s16:
   2249 ; CHECK: ret
   2250 entry:
   2251   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   2252   ret <4 x i16> %shuffle.i
   2253 }
   2254 
   2255 define <8 x i16> @test_undef_vtrn1q_s16(<8 x i16> %a) {
   2256 ; CHECK-LABEL: test_undef_vtrn1q_s16:
   2257 ; CHECK: ret
   2258 entry:
   2259   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2260   ret <8 x i16> %shuffle.i
   2261 }
   2262 
   2263 define <4 x i32> @test_undef_vtrn1q_s32(<4 x i32> %a) {
   2264 ; CHECK-LABEL: test_undef_vtrn1q_s32:
   2265 ; CHECK: ret
   2266 entry:
   2267   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   2268   ret <4 x i32> %shuffle.i
   2269 }
   2270 
   2271 define <8 x i8> @test_undef_vtrn1_u8(<8 x i8> %a) {
   2272 ; CHECK-LABEL: test_undef_vtrn1_u8:
   2273 ; CHECK: ret
   2274 entry:
   2275   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2276   ret <8 x i8> %shuffle.i
   2277 }
   2278 
   2279 define <16 x i8> @test_undef_vtrn1q_u8(<16 x i8> %a) {
   2280 ; CHECK-LABEL: test_undef_vtrn1q_u8:
   2281 ; CHECK: ret
   2282 entry:
   2283   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   2284   ret <16 x i8> %shuffle.i
   2285 }
   2286 
   2287 define <4 x i16> @test_undef_vtrn1_u16(<4 x i16> %a) {
   2288 ; CHECK-LABEL: test_undef_vtrn1_u16:
   2289 ; CHECK: ret
   2290 entry:
   2291   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   2292   ret <4 x i16> %shuffle.i
   2293 }
   2294 
   2295 define <8 x i16> @test_undef_vtrn1q_u16(<8 x i16> %a) {
   2296 ; CHECK-LABEL: test_undef_vtrn1q_u16:
   2297 ; CHECK: ret
   2298 entry:
   2299   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2300   ret <8 x i16> %shuffle.i
   2301 }
   2302 
   2303 define <4 x i32> @test_undef_vtrn1q_u32(<4 x i32> %a) {
   2304 ; CHECK-LABEL: test_undef_vtrn1q_u32:
   2305 ; CHECK: ret
   2306 entry:
   2307   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   2308   ret <4 x i32> %shuffle.i
   2309 }
   2310 
   2311 define <4 x float> @test_undef_vtrn1q_f32(<4 x float> %a) {
   2312 ; CHECK-LABEL: test_undef_vtrn1q_f32:
   2313 ; CHECK: ret
   2314 entry:
   2315   %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   2316   ret <4 x float> %shuffle.i
   2317 }
   2318 
   2319 define <8 x i8> @test_undef_vtrn1_p8(<8 x i8> %a) {
   2320 ; CHECK-LABEL: test_undef_vtrn1_p8:
   2321 ; CHECK: ret
   2322 entry:
   2323   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2324   ret <8 x i8> %shuffle.i
   2325 }
   2326 
   2327 define <16 x i8> @test_undef_vtrn1q_p8(<16 x i8> %a) {
   2328 ; CHECK-LABEL: test_undef_vtrn1q_p8:
   2329 ; CHECK: ret
   2330 entry:
   2331   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   2332   ret <16 x i8> %shuffle.i
   2333 }
   2334 
   2335 define <4 x i16> @test_undef_vtrn1_p16(<4 x i16> %a) {
   2336 ; CHECK-LABEL: test_undef_vtrn1_p16:
   2337 ; CHECK: ret
   2338 entry:
   2339   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   2340   ret <4 x i16> %shuffle.i
   2341 }
   2342 
   2343 define <8 x i16> @test_undef_vtrn1q_p16(<8 x i16> %a) {
   2344 ; CHECK-LABEL: test_undef_vtrn1q_p16:
   2345 ; CHECK: ret
   2346 entry:
   2347   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2348   ret <8 x i16> %shuffle.i
   2349 }
   2350 
   2351 define <8 x i8> @test_undef_vtrn2_s8(<8 x i8> %a) {
   2352 ; CHECK-LABEL: test_undef_vtrn2_s8:
   2353 ; CHECK: rev16 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2354 entry:
   2355   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2356   ret <8 x i8> %shuffle.i
   2357 }
   2358 
   2359 define <16 x i8> @test_undef_vtrn2q_s8(<16 x i8> %a) {
   2360 ; CHECK-LABEL: test_undef_vtrn2q_s8:
   2361 ; CHECK: rev16 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2362 entry:
   2363   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   2364   ret <16 x i8> %shuffle.i
   2365 }
   2366 
   2367 define <4 x i16> @test_undef_vtrn2_s16(<4 x i16> %a) {
   2368 ; CHECK-LABEL: test_undef_vtrn2_s16:
   2369 ; CHECK: rev32 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2370 entry:
   2371   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   2372   ret <4 x i16> %shuffle.i
   2373 }
   2374 
   2375 define <8 x i16> @test_undef_vtrn2q_s16(<8 x i16> %a) {
   2376 ; CHECK-LABEL: test_undef_vtrn2q_s16:
   2377 ; CHECK: rev32 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2378 entry:
   2379   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2380   ret <8 x i16> %shuffle.i
   2381 }
   2382 
   2383 define <4 x i32> @test_undef_vtrn2q_s32(<4 x i32> %a) {
   2384 ; CHECK-LABEL: test_undef_vtrn2q_s32:
   2385 ; CHECK: rev64 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2386 entry:
   2387   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   2388   ret <4 x i32> %shuffle.i
   2389 }
   2390 
   2391 define <8 x i8> @test_undef_vtrn2_u8(<8 x i8> %a) {
   2392 ; CHECK-LABEL: test_undef_vtrn2_u8:
   2393 ; CHECK: rev16 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2394 entry:
   2395   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2396   ret <8 x i8> %shuffle.i
   2397 }
   2398 
   2399 define <16 x i8> @test_undef_vtrn2q_u8(<16 x i8> %a) {
   2400 ; CHECK-LABEL: test_undef_vtrn2q_u8:
   2401 ; CHECK: rev16 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2402 entry:
   2403   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   2404   ret <16 x i8> %shuffle.i
   2405 }
   2406 
   2407 define <4 x i16> @test_undef_vtrn2_u16(<4 x i16> %a) {
   2408 ; CHECK-LABEL: test_undef_vtrn2_u16:
   2409 ; CHECK: rev32 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2410 entry:
   2411   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   2412   ret <4 x i16> %shuffle.i
   2413 }
   2414 
   2415 define <8 x i16> @test_undef_vtrn2q_u16(<8 x i16> %a) {
   2416 ; CHECK-LABEL: test_undef_vtrn2q_u16:
   2417 ; CHECK: rev32 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2418 entry:
   2419   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2420   ret <8 x i16> %shuffle.i
   2421 }
   2422 
   2423 define <4 x i32> @test_undef_vtrn2q_u32(<4 x i32> %a) {
   2424 ; CHECK-LABEL: test_undef_vtrn2q_u32:
   2425 ; CHECK: rev64 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2426 entry:
   2427   %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   2428   ret <4 x i32> %shuffle.i
   2429 }
   2430 
   2431 define <4 x float> @test_undef_vtrn2q_f32(<4 x float> %a) {
   2432 ; CHECK-LABEL: test_undef_vtrn2q_f32:
   2433 ; CHECK: rev64 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2434 entry:
   2435   %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   2436   ret <4 x float> %shuffle.i
   2437 }
   2438 
   2439 define <8 x i8> @test_undef_vtrn2_p8(<8 x i8> %a) {
   2440 ; CHECK-LABEL: test_undef_vtrn2_p8:
   2441 ; CHECK: rev16 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2442 entry:
   2443   %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2444   ret <8 x i8> %shuffle.i
   2445 }
   2446 
   2447 define <16 x i8> @test_undef_vtrn2q_p8(<16 x i8> %a) {
   2448 ; CHECK-LABEL: test_undef_vtrn2q_p8:
   2449 ; CHECK: rev16 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2450 entry:
   2451   %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   2452   ret <16 x i8> %shuffle.i
   2453 }
   2454 
   2455 define <4 x i16> @test_undef_vtrn2_p16(<4 x i16> %a) {
   2456 ; CHECK-LABEL: test_undef_vtrn2_p16:
   2457 ; CHECK: rev32 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2458 entry:
   2459   %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   2460   ret <4 x i16> %shuffle.i
   2461 }
   2462 
   2463 define <8 x i16> @test_undef_vtrn2q_p16(<8 x i16> %a) {
   2464 ; CHECK-LABEL: test_undef_vtrn2q_p16:
   2465 ; CHECK: rev32 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2466 entry:
   2467   %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2468   ret <8 x i16> %shuffle.i
   2469 }
   2470 
   2471 define %struct.int8x8x2_t @test_vuzp_s8(<8 x i8> %a, <8 x i8> %b) {
   2472 ; CHECK-LABEL: test_vuzp_s8:
   2473 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2474 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2475 entry:
   2476   %vuzp.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   2477   %vuzp1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   2478   %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
   2479   %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
   2480   ret %struct.int8x8x2_t %.fca.0.1.insert
   2481 }
   2482 
   2483 define %struct.int16x4x2_t @test_vuzp_s16(<4 x i16> %a, <4 x i16> %b) {
   2484 ; CHECK-LABEL: test_vuzp_s16:
   2485 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2486 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2487 entry:
   2488   %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   2489   %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   2490   %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
   2491   %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
   2492   ret %struct.int16x4x2_t %.fca.0.1.insert
   2493 }
   2494 
   2495 define %struct.int32x2x2_t @test_vuzp_s32(<2 x i32> %a, <2 x i32> %b) {
   2496 ; CHECK-LABEL: test_vuzp_s32:
   2497 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2498 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2499 entry:
   2500   %vuzp.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
   2501   %vuzp1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
   2502   %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vuzp.i, 0, 0
   2503   %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vuzp1.i, 0, 1
   2504   ret %struct.int32x2x2_t %.fca.0.1.insert
   2505 }
   2506 
   2507 define %struct.uint8x8x2_t @test_vuzp_u8(<8 x i8> %a, <8 x i8> %b) {
   2508 ; CHECK-LABEL: test_vuzp_u8:
   2509 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2510 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2511 entry:
   2512   %vuzp.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   2513   %vuzp1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   2514   %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
   2515   %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
   2516   ret %struct.uint8x8x2_t %.fca.0.1.insert
   2517 }
   2518 
   2519 define %struct.uint16x4x2_t @test_vuzp_u16(<4 x i16> %a, <4 x i16> %b) {
   2520 ; CHECK-LABEL: test_vuzp_u16:
   2521 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2522 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2523 entry:
   2524   %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   2525   %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   2526   %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
   2527   %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
   2528   ret %struct.uint16x4x2_t %.fca.0.1.insert
   2529 }
   2530 
   2531 define %struct.uint32x2x2_t @test_vuzp_u32(<2 x i32> %a, <2 x i32> %b) {
   2532 ; CHECK-LABEL: test_vuzp_u32:
   2533 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2534 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2535 entry:
   2536   %vuzp.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
   2537   %vuzp1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
   2538   %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vuzp.i, 0, 0
   2539   %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vuzp1.i, 0, 1
   2540   ret %struct.uint32x2x2_t %.fca.0.1.insert
   2541 }
   2542 
   2543 define %struct.float32x2x2_t @test_vuzp_f32(<2 x float> %a, <2 x float> %b) {
   2544 ; CHECK-LABEL: test_vuzp_f32:
   2545 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2546 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2547 entry:
   2548   %vuzp.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
   2549   %vuzp1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
   2550   %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vuzp.i, 0, 0
   2551   %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vuzp1.i, 0, 1
   2552   ret %struct.float32x2x2_t %.fca.0.1.insert
   2553 }
   2554 
   2555 define %struct.poly8x8x2_t @test_vuzp_p8(<8 x i8> %a, <8 x i8> %b) {
   2556 ; CHECK-LABEL: test_vuzp_p8:
   2557 ; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2558 ; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2559 entry:
   2560   %vuzp.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   2561   %vuzp1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   2562   %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
   2563   %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
   2564   ret %struct.poly8x8x2_t %.fca.0.1.insert
   2565 }
   2566 
   2567 define %struct.poly16x4x2_t @test_vuzp_p16(<4 x i16> %a, <4 x i16> %b) {
   2568 ; CHECK-LABEL: test_vuzp_p16:
   2569 ; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2570 ; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2571 entry:
   2572   %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   2573   %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   2574   %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
   2575   %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
   2576   ret %struct.poly16x4x2_t %.fca.0.1.insert
   2577 }
   2578 
   2579 define %struct.int8x16x2_t @test_vuzpq_s8(<16 x i8> %a, <16 x i8> %b) {
   2580 ; CHECK-LABEL: test_vuzpq_s8:
   2581 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2582 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2583 entry:
   2584   %vuzp.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   2585   %vuzp1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   2586   %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
   2587   %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
   2588   ret %struct.int8x16x2_t %.fca.0.1.insert
   2589 }
   2590 
   2591 define %struct.int16x8x2_t @test_vuzpq_s16(<8 x i16> %a, <8 x i16> %b) {
   2592 ; CHECK-LABEL: test_vuzpq_s16:
   2593 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2594 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2595 entry:
   2596   %vuzp.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   2597   %vuzp1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   2598   %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
   2599   %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
   2600   ret %struct.int16x8x2_t %.fca.0.1.insert
   2601 }
   2602 
   2603 define %struct.int32x4x2_t @test_vuzpq_s32(<4 x i32> %a, <4 x i32> %b) {
   2604 ; CHECK-LABEL: test_vuzpq_s32:
   2605 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2606 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2607 entry:
   2608   %vuzp.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   2609   %vuzp1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   2610   %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vuzp.i, 0, 0
   2611   %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vuzp1.i, 0, 1
   2612   ret %struct.int32x4x2_t %.fca.0.1.insert
   2613 }
   2614 
   2615 define %struct.uint8x16x2_t @test_vuzpq_u8(<16 x i8> %a, <16 x i8> %b) {
   2616 ; CHECK-LABEL: test_vuzpq_u8:
   2617 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2618 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2619 entry:
   2620   %vuzp.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   2621   %vuzp1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   2622   %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
   2623   %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
   2624   ret %struct.uint8x16x2_t %.fca.0.1.insert
   2625 }
   2626 
   2627 define %struct.uint16x8x2_t @test_vuzpq_u16(<8 x i16> %a, <8 x i16> %b) {
   2628 ; CHECK-LABEL: test_vuzpq_u16:
   2629 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2630 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2631 entry:
   2632   %vuzp.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   2633   %vuzp1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   2634   %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
   2635   %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
   2636   ret %struct.uint16x8x2_t %.fca.0.1.insert
   2637 }
   2638 
   2639 define %struct.uint32x4x2_t @test_vuzpq_u32(<4 x i32> %a, <4 x i32> %b) {
   2640 ; CHECK-LABEL: test_vuzpq_u32:
   2641 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2642 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2643 entry:
   2644   %vuzp.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   2645   %vuzp1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   2646   %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vuzp.i, 0, 0
   2647   %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vuzp1.i, 0, 1
   2648   ret %struct.uint32x4x2_t %.fca.0.1.insert
   2649 }
   2650 
   2651 define %struct.float32x4x2_t @test_vuzpq_f32(<4 x float> %a, <4 x float> %b) {
   2652 ; CHECK-LABEL: test_vuzpq_f32:
   2653 ; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2654 ; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2655 entry:
   2656   %vuzp.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
   2657   %vuzp1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
   2658   %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vuzp.i, 0, 0
   2659   %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vuzp1.i, 0, 1
   2660   ret %struct.float32x4x2_t %.fca.0.1.insert
   2661 }
   2662 
   2663 define %struct.poly8x16x2_t @test_vuzpq_p8(<16 x i8> %a, <16 x i8> %b) {
   2664 ; CHECK-LABEL: test_vuzpq_p8:
   2665 ; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2666 ; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2667 entry:
   2668   %vuzp.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
   2669   %vuzp1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
   2670   %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
   2671   %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
   2672   ret %struct.poly8x16x2_t %.fca.0.1.insert
   2673 }
   2674 
   2675 define %struct.poly16x8x2_t @test_vuzpq_p16(<8 x i16> %a, <8 x i16> %b) {
   2676 ; CHECK-LABEL: test_vuzpq_p16:
   2677 ; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2678 ; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2679 entry:
   2680   %vuzp.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   2681   %vuzp1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   2682   %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
   2683   %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
   2684   ret %struct.poly16x8x2_t %.fca.0.1.insert
   2685 }
   2686 
   2687 define %struct.int8x8x2_t @test_vzip_s8(<8 x i8> %a, <8 x i8> %b) {
   2688 ; CHECK-LABEL: test_vzip_s8:
   2689 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2690 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2691 entry:
   2692   %vzip.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2693   %vzip1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2694   %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
   2695   %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
   2696   ret %struct.int8x8x2_t %.fca.0.1.insert
   2697 }
   2698 
   2699 define %struct.int16x4x2_t @test_vzip_s16(<4 x i16> %a, <4 x i16> %b) {
   2700 ; CHECK-LABEL: test_vzip_s16:
   2701 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2702 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2703 entry:
   2704   %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2705   %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2706   %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
   2707   %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
   2708   ret %struct.int16x4x2_t %.fca.0.1.insert
   2709 }
   2710 
   2711 define %struct.int32x2x2_t @test_vzip_s32(<2 x i32> %a, <2 x i32> %b) {
   2712 ; CHECK-LABEL: test_vzip_s32:
   2713 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2714 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2715 entry:
   2716   %vzip.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
   2717   %vzip1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
   2718   %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vzip.i, 0, 0
   2719   %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vzip1.i, 0, 1
   2720   ret %struct.int32x2x2_t %.fca.0.1.insert
   2721 }
   2722 
   2723 define %struct.uint8x8x2_t @test_vzip_u8(<8 x i8> %a, <8 x i8> %b) {
   2724 ; CHECK-LABEL: test_vzip_u8:
   2725 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2726 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2727 entry:
   2728   %vzip.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2729   %vzip1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2730   %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
   2731   %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
   2732   ret %struct.uint8x8x2_t %.fca.0.1.insert
   2733 }
   2734 
   2735 define %struct.uint16x4x2_t @test_vzip_u16(<4 x i16> %a, <4 x i16> %b) {
   2736 ; CHECK-LABEL: test_vzip_u16:
   2737 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2738 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2739 entry:
   2740   %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2741   %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2742   %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
   2743   %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
   2744   ret %struct.uint16x4x2_t %.fca.0.1.insert
   2745 }
   2746 
   2747 define %struct.uint32x2x2_t @test_vzip_u32(<2 x i32> %a, <2 x i32> %b) {
   2748 ; CHECK-LABEL: test_vzip_u32:
   2749 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2750 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2751 entry:
   2752   %vzip.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
   2753   %vzip1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
   2754   %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vzip.i, 0, 0
   2755   %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vzip1.i, 0, 1
   2756   ret %struct.uint32x2x2_t %.fca.0.1.insert
   2757 }
   2758 
   2759 define %struct.float32x2x2_t @test_vzip_f32(<2 x float> %a, <2 x float> %b) {
   2760 ; CHECK-LABEL: test_vzip_f32:
   2761 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2762 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2763 entry:
   2764   %vzip.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
   2765   %vzip1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
   2766   %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vzip.i, 0, 0
   2767   %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vzip1.i, 0, 1
   2768   ret %struct.float32x2x2_t %.fca.0.1.insert
   2769 }
   2770 
   2771 define %struct.poly8x8x2_t @test_vzip_p8(<8 x i8> %a, <8 x i8> %b) {
   2772 ; CHECK-LABEL: test_vzip_p8:
   2773 ; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2774 ; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2775 entry:
   2776   %vzip.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2777   %vzip1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2778   %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
   2779   %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
   2780   ret %struct.poly8x8x2_t %.fca.0.1.insert
   2781 }
   2782 
   2783 define %struct.poly16x4x2_t @test_vzip_p16(<4 x i16> %a, <4 x i16> %b) {
   2784 ; CHECK-LABEL: test_vzip_p16:
   2785 ; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2786 ; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2787 entry:
   2788   %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2789   %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2790   %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
   2791   %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
   2792   ret %struct.poly16x4x2_t %.fca.0.1.insert
   2793 }
   2794 
   2795 define %struct.int8x16x2_t @test_vzipq_s8(<16 x i8> %a, <16 x i8> %b) {
   2796 ; CHECK-LABEL: test_vzipq_s8:
   2797 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2798 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2799 entry:
   2800   %vzip.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   2801   %vzip1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   2802   %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
   2803   %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
   2804   ret %struct.int8x16x2_t %.fca.0.1.insert
   2805 }
   2806 
   2807 define %struct.int16x8x2_t @test_vzipq_s16(<8 x i16> %a, <8 x i16> %b) {
   2808 ; CHECK-LABEL: test_vzipq_s16:
   2809 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2810 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2811 entry:
   2812   %vzip.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2813   %vzip1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2814   %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
   2815   %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
   2816   ret %struct.int16x8x2_t %.fca.0.1.insert
   2817 }
   2818 
   2819 define %struct.int32x4x2_t @test_vzipq_s32(<4 x i32> %a, <4 x i32> %b) {
   2820 ; CHECK-LABEL: test_vzipq_s32:
   2821 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2822 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2823 entry:
   2824   %vzip.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2825   %vzip1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2826   %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vzip.i, 0, 0
   2827   %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vzip1.i, 0, 1
   2828   ret %struct.int32x4x2_t %.fca.0.1.insert
   2829 }
   2830 
   2831 define %struct.uint8x16x2_t @test_vzipq_u8(<16 x i8> %a, <16 x i8> %b) {
   2832 ; CHECK-LABEL: test_vzipq_u8:
   2833 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2834 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2835 entry:
   2836   %vzip.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   2837   %vzip1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   2838   %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
   2839   %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
   2840   ret %struct.uint8x16x2_t %.fca.0.1.insert
   2841 }
   2842 
   2843 define %struct.uint16x8x2_t @test_vzipq_u16(<8 x i16> %a, <8 x i16> %b) {
   2844 ; CHECK-LABEL: test_vzipq_u16:
   2845 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2846 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2847 entry:
   2848   %vzip.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2849   %vzip1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2850   %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
   2851   %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
   2852   ret %struct.uint16x8x2_t %.fca.0.1.insert
   2853 }
   2854 
   2855 define %struct.uint32x4x2_t @test_vzipq_u32(<4 x i32> %a, <4 x i32> %b) {
   2856 ; CHECK-LABEL: test_vzipq_u32:
   2857 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2858 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2859 entry:
   2860   %vzip.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2861   %vzip1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2862   %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vzip.i, 0, 0
   2863   %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vzip1.i, 0, 1
   2864   ret %struct.uint32x4x2_t %.fca.0.1.insert
   2865 }
   2866 
   2867 define %struct.float32x4x2_t @test_vzipq_f32(<4 x float> %a, <4 x float> %b) {
   2868 ; CHECK-LABEL: test_vzipq_f32:
   2869 ; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2870 ; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   2871 entry:
   2872   %vzip.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
   2873   %vzip1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
   2874   %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vzip.i, 0, 0
   2875   %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vzip1.i, 0, 1
   2876   ret %struct.float32x4x2_t %.fca.0.1.insert
   2877 }
   2878 
   2879 define %struct.poly8x16x2_t @test_vzipq_p8(<16 x i8> %a, <16 x i8> %b) {
   2880 ; CHECK-LABEL: test_vzipq_p8:
   2881 ; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2882 ; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   2883 entry:
   2884   %vzip.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
   2885   %vzip1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
   2886   %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
   2887   %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
   2888   ret %struct.poly8x16x2_t %.fca.0.1.insert
   2889 }
   2890 
   2891 define %struct.poly16x8x2_t @test_vzipq_p16(<8 x i16> %a, <8 x i16> %b) {
   2892 ; CHECK-LABEL: test_vzipq_p16:
   2893 ; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2894 ; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   2895 entry:
   2896   %vzip.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
   2897   %vzip1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
   2898   %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
   2899   %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
   2900   ret %struct.poly16x8x2_t %.fca.0.1.insert
   2901 }
   2902 
   2903 define %struct.int8x8x2_t @test_vtrn_s8(<8 x i8> %a, <8 x i8> %b) {
   2904 ; CHECK-LABEL: test_vtrn_s8:
   2905 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2906 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2907 entry:
   2908   %vtrn.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2909   %vtrn1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2910   %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
   2911   %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
   2912   ret %struct.int8x8x2_t %.fca.0.1.insert
   2913 }
   2914 
   2915 define %struct.int16x4x2_t @test_vtrn_s16(<4 x i16> %a, <4 x i16> %b) {
   2916 ; CHECK-LABEL: test_vtrn_s16:
   2917 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2918 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2919 entry:
   2920   %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   2921   %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   2922   %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
   2923   %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
   2924   ret %struct.int16x4x2_t %.fca.0.1.insert
   2925 }
   2926 
   2927 define %struct.int32x2x2_t @test_vtrn_s32(<2 x i32> %a, <2 x i32> %b) {
   2928 ; CHECK-LABEL: test_vtrn_s32:
   2929 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2930 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2931 entry:
   2932   %vtrn.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
   2933   %vtrn1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
   2934   %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vtrn.i, 0, 0
   2935   %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vtrn1.i, 0, 1
   2936   ret %struct.int32x2x2_t %.fca.0.1.insert
   2937 }
   2938 
   2939 define %struct.uint8x8x2_t @test_vtrn_u8(<8 x i8> %a, <8 x i8> %b) {
   2940 ; CHECK-LABEL: test_vtrn_u8:
   2941 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2942 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2943 entry:
   2944   %vtrn.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2945   %vtrn1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2946   %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
   2947   %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
   2948   ret %struct.uint8x8x2_t %.fca.0.1.insert
   2949 }
   2950 
   2951 define %struct.uint16x4x2_t @test_vtrn_u16(<4 x i16> %a, <4 x i16> %b) {
   2952 ; CHECK-LABEL: test_vtrn_u16:
   2953 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2954 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   2955 entry:
   2956   %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   2957   %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   2958   %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
   2959   %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
   2960   ret %struct.uint16x4x2_t %.fca.0.1.insert
   2961 }
   2962 
   2963 define %struct.uint32x2x2_t @test_vtrn_u32(<2 x i32> %a, <2 x i32> %b) {
   2964 ; CHECK-LABEL: test_vtrn_u32:
   2965 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2966 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2967 entry:
   2968   %vtrn.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
   2969   %vtrn1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
   2970   %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vtrn.i, 0, 0
   2971   %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vtrn1.i, 0, 1
   2972   ret %struct.uint32x2x2_t %.fca.0.1.insert
   2973 }
   2974 
   2975 define %struct.float32x2x2_t @test_vtrn_f32(<2 x float> %a, <2 x float> %b) {
   2976 ; CHECK-LABEL: test_vtrn_f32:
   2977 ; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2978 ; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   2979 entry:
   2980   %vtrn.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
   2981   %vtrn1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
   2982   %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vtrn.i, 0, 0
   2983   %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vtrn1.i, 0, 1
   2984   ret %struct.float32x2x2_t %.fca.0.1.insert
   2985 }
   2986 
   2987 define %struct.poly8x8x2_t @test_vtrn_p8(<8 x i8> %a, <8 x i8> %b) {
   2988 ; CHECK-LABEL: test_vtrn_p8:
   2989 ; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2990 ; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   2991 entry:
   2992   %vtrn.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   2993   %vtrn1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   2994   %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
   2995   %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
   2996   ret %struct.poly8x8x2_t %.fca.0.1.insert
   2997 }
   2998 
   2999 define %struct.poly16x4x2_t @test_vtrn_p16(<4 x i16> %a, <4 x i16> %b) {
   3000 ; CHECK-LABEL: test_vtrn_p16:
   3001 ; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   3002 ; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   3003 entry:
   3004   %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   3005   %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   3006   %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
   3007   %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
   3008   ret %struct.poly16x4x2_t %.fca.0.1.insert
   3009 }
   3010 
   3011 define %struct.int8x16x2_t @test_vtrnq_s8(<16 x i8> %a, <16 x i8> %b) {
   3012 ; CHECK-LABEL: test_vtrnq_s8:
   3013 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   3014 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   3015 entry:
   3016   %vtrn.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   3017   %vtrn1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   3018   %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
   3019   %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
   3020   ret %struct.int8x16x2_t %.fca.0.1.insert
   3021 }
   3022 
   3023 define %struct.int16x8x2_t @test_vtrnq_s16(<8 x i16> %a, <8 x i16> %b) {
   3024 ; CHECK-LABEL: test_vtrnq_s16:
   3025 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   3026 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   3027 entry:
   3028   %vtrn.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   3029   %vtrn1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   3030   %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
   3031   %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
   3032   ret %struct.int16x8x2_t %.fca.0.1.insert
   3033 }
   3034 
   3035 define %struct.int32x4x2_t @test_vtrnq_s32(<4 x i32> %a, <4 x i32> %b) {
   3036 ; CHECK-LABEL: test_vtrnq_s32:
   3037 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   3038 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   3039 entry:
   3040   %vtrn.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   3041   %vtrn1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   3042   %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vtrn.i, 0, 0
   3043   %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vtrn1.i, 0, 1
   3044   ret %struct.int32x4x2_t %.fca.0.1.insert
   3045 }
   3046 
   3047 define %struct.uint8x16x2_t @test_vtrnq_u8(<16 x i8> %a, <16 x i8> %b) {
   3048 ; CHECK-LABEL: test_vtrnq_u8:
   3049 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   3050 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   3051 entry:
   3052   %vtrn.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   3053   %vtrn1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   3054   %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
   3055   %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
   3056   ret %struct.uint8x16x2_t %.fca.0.1.insert
   3057 }
   3058 
   3059 define %struct.uint16x8x2_t @test_vtrnq_u16(<8 x i16> %a, <8 x i16> %b) {
   3060 ; CHECK-LABEL: test_vtrnq_u16:
   3061 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   3062 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   3063 entry:
   3064   %vtrn.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   3065   %vtrn1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   3066   %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
   3067   %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
   3068   ret %struct.uint16x8x2_t %.fca.0.1.insert
   3069 }
   3070 
   3071 define %struct.uint32x4x2_t @test_vtrnq_u32(<4 x i32> %a, <4 x i32> %b) {
   3072 ; CHECK-LABEL: test_vtrnq_u32:
   3073 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   3074 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   3075 entry:
   3076   %vtrn.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   3077   %vtrn1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   3078   %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vtrn.i, 0, 0
   3079   %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vtrn1.i, 0, 1
   3080   ret %struct.uint32x4x2_t %.fca.0.1.insert
   3081 }
   3082 
   3083 define %struct.float32x4x2_t @test_vtrnq_f32(<4 x float> %a, <4 x float> %b) {
   3084 ; CHECK-LABEL: test_vtrnq_f32:
   3085 ; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   3086 ; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   3087 entry:
   3088   %vtrn.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
   3089   %vtrn1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
   3090   %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vtrn.i, 0, 0
   3091   %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vtrn1.i, 0, 1
   3092   ret %struct.float32x4x2_t %.fca.0.1.insert
   3093 }
   3094 
   3095 define %struct.poly8x16x2_t @test_vtrnq_p8(<16 x i8> %a, <16 x i8> %b) {
   3096 ; CHECK-LABEL: test_vtrnq_p8:
   3097 ; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   3098 ; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   3099 entry:
   3100   %vtrn.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
   3101   %vtrn1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
   3102   %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
   3103   %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
   3104   ret %struct.poly8x16x2_t %.fca.0.1.insert
   3105 }
   3106 
   3107 define %struct.poly16x8x2_t @test_vtrnq_p16(<8 x i16> %a, <8 x i16> %b) {
   3108 ; CHECK-LABEL: test_vtrnq_p16:
   3109 ; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   3110 ; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   3111 entry:
   3112   %vtrn.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
   3113   %vtrn1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
   3114   %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
   3115   %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
   3116   ret %struct.poly16x8x2_t %.fca.0.1.insert
   3117 }
   3118 
   3119 define %struct.uint8x8x2_t @test_uzp(<16 x i8> %y) {
   3120 ; CHECK-LABEL: test_uzp:
   3121 
   3122   %vuzp.i = shufflevector <16 x i8> %y, <16 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
   3123   %vuzp1.i = shufflevector <16 x i8> %y, <16 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
   3124   %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
   3125   %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
   3126   ret %struct.uint8x8x2_t %.fca.0.1.insert
   3127 
   3128 }
   3129