Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 -triple arm64-apple-ios7.0 -target-feature +neon -ffreestanding -emit-llvm -o - -O1 %s | FileCheck %s
      2 #include <arm_neon.h>
      3 
      4 int8x8_t test_vqshl_n_s8(int8x8_t in) {
      5   // CHECK-LABEL: @test_vqshl_n_s8
      6   // CHECK: call <8 x i8> @llvm.aarch64.neon.sqshl.v8i8(<8 x i8> %in, <8 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
      7   return vqshl_n_s8(in, 1);
      8 }
      9 
     10 int16x4_t test_vqshl_n_s16(int16x4_t in) {
     11   // CHECK-LABEL: @test_vqshl_n_s16
     12   // CHECK: call <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i16> %in, <4 x i16> <i16 1, i16 1, i16 1, i16 1>)
     13   return vqshl_n_s16(in, 1);
     14 }
     15 
     16 int32x2_t test_vqshl_n_s32(int32x2_t in) {
     17   // CHECK-LABEL: @test_vqshl_n_s32
     18   // CHECK: call <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32> %in, <2 x i32> <i32 1, i32 1>)
     19   return vqshl_n_s32(in, 1);
     20 }
     21 
     22 int64x1_t test_vqshl_n_s64(int64x1_t in) {
     23   // CHECK-LABEL: @test_vqshl_n_s64
     24   // CHECK: call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> %in, <1 x i64> <i64 1>)
     25   return vqshl_n_s64(in, 1);
     26 }
     27 
     28 
     29 int8x16_t test_vqshlq_n_s8(int8x16_t in) {
     30   // CHECK-LABEL: @test_vqshlq_n_s8
     31   // CHECK: call <16 x i8> @llvm.aarch64.neon.sqshl.v16i8(<16 x i8> %in, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
     32   return vqshlq_n_s8(in, 1);
     33 }
     34 
     35 int16x8_t test_vqshlq_n_s16(int16x8_t in) {
     36   // CHECK-LABEL: @test_vqshlq_n_s16
     37   // CHECK: call <8 x i16> @llvm.aarch64.neon.sqshl.v8i16(<8 x i16> %in, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
     38   return vqshlq_n_s16(in, 1);
     39 }
     40 
     41 int32x4_t test_vqshlq_n_s32(int32x4_t in) {
     42   // CHECK-LABEL: @test_vqshlq_n_s32
     43   // CHECK: call <4 x i32> @llvm.aarch64.neon.sqshl.v4i32(<4 x i32> %in, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
     44   return vqshlq_n_s32(in, 1);
     45 }
     46 
     47 int64x2_t test_vqshlq_n_s64(int64x2_t in) {
     48   // CHECK-LABEL: @test_vqshlq_n_s64
     49   // CHECK: call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> %in, <2 x i64> <i64 1, i64 1>
     50   return vqshlq_n_s64(in, 1);
     51 }
     52 
     53 uint8x8_t test_vqshl_n_u8(uint8x8_t in) {
     54   // CHECK-LABEL: @test_vqshl_n_u8
     55   // CHECK: call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> %in, <8 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
     56   return vqshl_n_u8(in, 1);
     57 }
     58 
     59 uint16x4_t test_vqshl_n_u16(uint16x4_t in) {
     60   // CHECK-LABEL: @test_vqshl_n_u16
     61   // CHECK: call <4 x i16> @llvm.aarch64.neon.uqshl.v4i16(<4 x i16> %in, <4 x i16> <i16 1, i16 1, i16 1, i16 1>)
     62   return vqshl_n_u16(in, 1);
     63 }
     64 
     65 uint32x2_t test_vqshl_n_u32(uint32x2_t in) {
     66   // CHECK-LABEL: @test_vqshl_n_u32
     67   // CHECK: call <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32> %in, <2 x i32> <i32 1, i32 1>)
     68   return vqshl_n_u32(in, 1);
     69 }
     70 
     71 uint64x1_t test_vqshl_n_u64(uint64x1_t in) {
     72   // CHECK-LABEL: @test_vqshl_n_u64
     73   // CHECK: call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> %in, <1 x i64> <i64 1>)
     74   return vqshl_n_u64(in, 1);
     75 }
     76 
     77 uint8x16_t test_vqshlq_n_u8(uint8x16_t in) {
     78   // CHECK-LABEL: @test_vqshlq_n_u8
     79   // CHECK: call <16 x i8> @llvm.aarch64.neon.uqshl.v16i8(<16 x i8> %in, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
     80   return vqshlq_n_u8(in, 1);
     81 }
     82 
     83 uint16x8_t test_vqshlq_n_u16(uint16x8_t in) {
     84   // CHECK-LABEL: @test_vqshlq_n_u16
     85   // CHECK: call <8 x i16> @llvm.aarch64.neon.uqshl.v8i16(<8 x i16> %in, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
     86   return vqshlq_n_u16(in, 1);
     87 }
     88 
     89 uint32x4_t test_vqshlq_n_u32(uint32x4_t in) {
     90   // CHECK-LABEL: @test_vqshlq_n_u32
     91   // CHECK: call <4 x i32> @llvm.aarch64.neon.uqshl.v4i32(<4 x i32> %in, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
     92   return vqshlq_n_u32(in, 1);
     93 }
     94 
     95 uint64x2_t test_vqshlq_n_u64(uint64x2_t in) {
     96   // CHECK-LABEL: @test_vqshlq_n_u64
     97   // CHECK: call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> %in, <2 x i64> <i64 1, i64 1>
     98   return vqshlq_n_u64(in, 1);
     99 }
    100 
    101 int8x8_t test_vrshr_n_s8(int8x8_t in) {
    102   // CHECK-LABEL: @test_vrshr_n_s8
    103   // CHECK: call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> %in, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
    104   return vrshr_n_s8(in, 1);
    105 }
    106 
    107 int16x4_t test_vrshr_n_s16(int16x4_t in) {
    108   // CHECK-LABEL: @test_vrshr_n_s16
    109   // CHECK: call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> %in, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>)
    110   return vrshr_n_s16(in, 1);
    111 }
    112 
    113 int32x2_t test_vrshr_n_s32(int32x2_t in) {
    114   // CHECK-LABEL: @test_vrshr_n_s32
    115   // CHECK: call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> %in, <2 x i32> <i32 -1, i32 -1>)
    116   return vrshr_n_s32(in, 1);
    117 }
    118 
    119 int64x1_t test_vrshr_n_s64(int64x1_t in) {
    120   // CHECK-LABEL: @test_vrshr_n_s64
    121   // CHECK: call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> %in, <1 x i64> <i64 -1>)
    122   return vrshr_n_s64(in, 1);
    123 }
    124 
    125 
    126 int8x16_t test_vrshrq_n_s8(int8x16_t in) {
    127   // CHECK-LABEL: @test_vrshrq_n_s8
    128   // CHECK: call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> %in, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
    129   return vrshrq_n_s8(in, 1);
    130 }
    131 
    132 int16x8_t test_vrshrq_n_s16(int16x8_t in) {
    133   // CHECK-LABEL: @test_vrshrq_n_s16
    134   // CHECK: call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> %in, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
    135   return vrshrq_n_s16(in, 1);
    136 }
    137 
    138 int32x4_t test_vrshrq_n_s32(int32x4_t in) {
    139   // CHECK-LABEL: @test_vrshrq_n_s32
    140   // CHECK: call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> %in, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
    141   return vrshrq_n_s32(in, 1);
    142 }
    143 
    144 int64x2_t test_vrshrq_n_s64(int64x2_t in) {
    145   // CHECK-LABEL: @test_vrshrq_n_s64
    146   // CHECK: call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> %in, <2 x i64> <i64 -1, i64 -1>
    147   return vrshrq_n_s64(in, 1);
    148 }
    149 
    150 uint8x8_t test_vrshr_n_u8(uint8x8_t in) {
    151   // CHECK-LABEL: @test_vrshr_n_u8
    152   // CHECK: call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> %in, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
    153   return vrshr_n_u8(in, 1);
    154 }
    155 
    156 uint16x4_t test_vrshr_n_u16(uint16x4_t in) {
    157   // CHECK-LABEL: @test_vrshr_n_u16
    158   // CHECK: call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> %in, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>)
    159   return vrshr_n_u16(in, 1);
    160 }
    161 
    162 uint32x2_t test_vrshr_n_u32(uint32x2_t in) {
    163   // CHECK-LABEL: @test_vrshr_n_u32
    164   // CHECK: call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> %in, <2 x i32> <i32 -1, i32 -1>)
    165   return vrshr_n_u32(in, 1);
    166 }
    167 
    168 uint64x1_t test_vrshr_n_u64(uint64x1_t in) {
    169   // CHECK-LABEL: @test_vrshr_n_u64
    170   // CHECK: call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> %in, <1 x i64> <i64 -1>)
    171   return vrshr_n_u64(in, 1);
    172 }
    173 
    174 uint8x16_t test_vrshrq_n_u8(uint8x16_t in) {
    175   // CHECK-LABEL: @test_vrshrq_n_u8
    176   // CHECK: call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> %in, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
    177   return vrshrq_n_u8(in, 1);
    178 }
    179 
    180 uint16x8_t test_vrshrq_n_u16(uint16x8_t in) {
    181   // CHECK-LABEL: @test_vrshrq_n_u16
    182   // CHECK: call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> %in, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
    183   return vrshrq_n_u16(in, 1);
    184 }
    185 
    186 uint32x4_t test_vrshrq_n_u32(uint32x4_t in) {
    187   // CHECK-LABEL: @test_vrshrq_n_u32
    188   // CHECK: call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> %in, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
    189   return vrshrq_n_u32(in, 1);
    190 }
    191 
    192 uint64x2_t test_vrshrq_n_u64(uint64x2_t in) {
    193   // CHECK-LABEL: @test_vrshrq_n_u64
    194   // CHECK: call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> %in, <2 x i64> <i64 -1, i64 -1>
    195   return vrshrq_n_u64(in, 1);
    196 }
    197 
    198 int8x8_t test_vqshlu_n_s8(int8x8_t in) {
    199   // CHECK-LABEL: @test_vqshlu_n_s8
    200   // CHECK: call <8 x i8> @llvm.aarch64.neon.sqshlu.v8i8(<8 x i8> %in, <8 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
    201   return vqshlu_n_s8(in, 1);
    202 }
    203 
    204 int16x4_t test_vqshlu_n_s16(int16x4_t in) {
    205   // CHECK-LABEL: @test_vqshlu_n_s16
    206   // CHECK: call <4 x i16> @llvm.aarch64.neon.sqshlu.v4i16(<4 x i16> %in, <4 x i16> <i16 1, i16 1, i16 1, i16 1>)
    207   return vqshlu_n_s16(in, 1);
    208 }
    209 
    210 int32x2_t test_vqshlu_n_s32(int32x2_t in) {
    211   // CHECK-LABEL: @test_vqshlu_n_s32
    212   // CHECK: call <2 x i32> @llvm.aarch64.neon.sqshlu.v2i32(<2 x i32> %in, <2 x i32> <i32 1, i32 1>)
    213   return vqshlu_n_s32(in, 1);
    214 }
    215 
    216 int64x1_t test_vqshlu_n_s64(int64x1_t in) {
    217   // CHECK-LABEL: @test_vqshlu_n_s64
    218   // CHECK: call <1 x i64> @llvm.aarch64.neon.sqshlu.v1i64(<1 x i64> %in, <1 x i64> <i64 1>)
    219   return vqshlu_n_s64(in, 1);
    220 }
    221 
    222 
    223 int8x16_t test_vqshluq_n_s8(int8x16_t in) {
    224   // CHECK-LABEL: @test_vqshluq_n_s8
    225   // CHECK: call <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8> %in, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
    226   return vqshluq_n_s8(in, 1);
    227 }
    228 
    229 int16x8_t test_vqshluq_n_s16(int16x8_t in) {
    230   // CHECK-LABEL: @test_vqshluq_n_s16
    231   // CHECK: call <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16> %in, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
    232   return vqshluq_n_s16(in, 1);
    233 }
    234 
    235 int32x4_t test_vqshluq_n_s32(int32x4_t in) {
    236   // CHECK-LABEL: @test_vqshluq_n_s32
    237   // CHECK: call <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32> %in, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
    238   return vqshluq_n_s32(in, 1);
    239 }
    240 
    241 int64x2_t test_vqshluq_n_s64(int64x2_t in) {
    242   // CHECK-LABEL: @test_vqshluq_n_s64
    243   // CHECK: call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> %in, <2 x i64> <i64 1, i64 1>
    244   return vqshluq_n_s64(in, 1);
    245 }
    246 
    247 int8x8_t test_vrsra_n_s8(int8x8_t acc, int8x8_t in) {
    248   // CHECK-LABEL: @test_vrsra_n_s8
    249   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> %in, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
    250   // CHECK: add <8 x i8> [[TMP]], %acc
    251   return vrsra_n_s8(acc, in, 1);
    252 }
    253 
    254 int16x4_t test_vrsra_n_s16(int16x4_t acc, int16x4_t in) {
    255   // CHECK-LABEL: @test_vrsra_n_s16
    256   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> %in, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>)
    257   // CHECK: add <4 x i16> [[TMP]], %acc
    258   return vrsra_n_s16(acc, in, 1);
    259 }
    260 
    261 int32x2_t test_vrsra_n_s32(int32x2_t acc, int32x2_t in) {
    262   // CHECK-LABEL: @test_vrsra_n_s32
    263   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> %in, <2 x i32> <i32 -1, i32 -1>)
    264   // CHECK: add <2 x i32> [[TMP]], %acc
    265   return vrsra_n_s32(acc, in, 1);
    266 }
    267 
    268 int64x1_t test_vrsra_n_s64(int64x1_t acc, int64x1_t in) {
    269   // CHECK-LABEL: @test_vrsra_n_s64
    270   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> %in, <1 x i64> <i64 -1>)
    271   // CHECK: add <1 x i64> [[TMP]], %acc
    272   return vrsra_n_s64(acc, in, 1);
    273 }
    274 
    275 int8x16_t test_vrsraq_n_s8(int8x16_t acc, int8x16_t in) {
    276   // CHECK-LABEL: @test_vrsraq_n_s8
    277   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> %in, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
    278   // CHECK: add <16 x i8> [[TMP]], %acc
    279   return vrsraq_n_s8(acc, in, 1);
    280 }
    281 
    282 int16x8_t test_vrsraq_n_s16(int16x8_t acc, int16x8_t in) {
    283   // CHECK-LABEL: @test_vrsraq_n_s16
    284   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> %in, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
    285   // CHECK: add <8 x i16> [[TMP]], %acc
    286   return vrsraq_n_s16(acc, in, 1);
    287 }
    288 
    289 int32x4_t test_vrsraq_n_s32(int32x4_t acc, int32x4_t in) {
    290   // CHECK-LABEL: @test_vrsraq_n_s32
    291   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> %in, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
    292   // CHECK: add <4 x i32> [[TMP]], %acc
    293   return vrsraq_n_s32(acc, in, 1);
    294 }
    295 
    296 int64x2_t test_vrsraq_n_s64(int64x2_t acc, int64x2_t in) {
    297   // CHECK-LABEL: @test_vrsraq_n_s64
    298   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> %in, <2 x i64> <i64 -1, i64 -1>)
    299   // CHECK: add <2 x i64> [[TMP]], %acc
    300   return vrsraq_n_s64(acc, in, 1);
    301 }
    302 
    303 uint8x8_t test_vrsra_n_u8(uint8x8_t acc, uint8x8_t in) {
    304   // CHECK-LABEL: @test_vrsra_n_u8
    305   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> %in, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
    306   // CHECK: add <8 x i8> [[TMP]], %acc
    307   return vrsra_n_u8(acc, in, 1);
    308 }
    309 
    310 uint16x4_t test_vrsra_n_u16(uint16x4_t acc, uint16x4_t in) {
    311   // CHECK-LABEL: @test_vrsra_n_u16
    312   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> %in, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>)
    313   // CHECK: add <4 x i16> [[TMP]], %acc
    314   return vrsra_n_u16(acc, in, 1);
    315 }
    316 
    317 uint32x2_t test_vrsra_n_u32(uint32x2_t acc, uint32x2_t in) {
    318   // CHECK-LABEL: @test_vrsra_n_u32
    319   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> %in, <2 x i32> <i32 -1, i32 -1>)
    320   // CHECK: add <2 x i32> [[TMP]], %acc
    321   return vrsra_n_u32(acc, in, 1);
    322 }
    323 
    324 uint64x1_t test_vrsra_n_u64(uint64x1_t acc, uint64x1_t in) {
    325   // CHECK-LABEL: @test_vrsra_n_u64
    326   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> %in, <1 x i64> <i64 -1>)
    327   // CHECK: add <1 x i64> [[TMP]], %acc
    328   return vrsra_n_u64(acc, in, 1);
    329 }
    330 
    331 uint8x16_t test_vrsraq_n_u8(uint8x16_t acc, uint8x16_t in) {
    332   // CHECK-LABEL: @test_vrsraq_n_u8
    333   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> %in, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
    334   // CHECK: add <16 x i8> [[TMP]], %acc
    335   return vrsraq_n_u8(acc, in, 1);
    336 }
    337 
    338 uint16x8_t test_vrsraq_n_u16(uint16x8_t acc, uint16x8_t in) {
    339   // CHECK-LABEL: @test_vrsraq_n_u16
    340   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> %in, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
    341   // CHECK: add <8 x i16> [[TMP]], %acc
    342   return vrsraq_n_u16(acc, in, 1);
    343 }
    344 
    345 uint32x4_t test_vrsraq_n_u32(uint32x4_t acc, uint32x4_t in) {
    346   // CHECK-LABEL: @test_vrsraq_n_u32
    347   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> %in, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
    348   // CHECK: add <4 x i32> [[TMP]], %acc
    349   return vrsraq_n_u32(acc, in, 1);
    350 }
    351 
    352 uint64x2_t test_vrsraq_n_u64(uint64x2_t acc, uint64x2_t in) {
    353   // CHECK-LABEL: @test_vrsraq_n_u64
    354   // CHECK: [[TMP:%[0-9a-zA-Z._]+]] = tail call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> %in, <2 x i64> <i64 -1, i64 -1>)
    355   // CHECK: add <2 x i64> [[TMP]], %acc
    356   return vrsraq_n_u64(acc, in, 1);
    357 }
    358