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
4int8x8_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
10int16x4_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
16int32x2_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
22int64x1_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
29int8x16_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
35int16x8_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
41int32x4_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
47int64x2_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
53uint8x8_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
59uint16x4_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
65uint32x2_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
71uint64x1_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
77uint8x16_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
83uint16x8_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
89uint32x4_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
95uint64x2_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
101int8x8_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
107int16x4_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
113int32x2_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
119int64x1_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
126int8x16_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
132int16x8_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
138int32x4_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
144int64x2_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
150uint8x8_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
156uint16x4_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
162uint32x2_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
168uint64x1_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
174uint8x16_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
180uint16x8_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
186uint32x4_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
192uint64x2_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
198int8x8_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
204int16x4_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
210int32x2_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
216int64x1_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
223int8x16_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
229int16x8_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
235int32x4_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
241int64x2_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
247int8x8_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
254int16x4_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
261int32x2_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
268int64x1_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
275int8x16_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
282int16x8_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
289int32x4_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
296int64x2_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
303uint8x8_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
310uint16x4_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
317uint32x2_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
324uint64x1_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
331uint8x16_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
338uint16x8_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
345uint32x4_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
352uint64x2_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