16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -triple arm64-apple-ios7.0 -target-feature +neon -ffreestanding -emit-llvm -o - -O1 %s | FileCheck %s
2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <arm_neon.h>
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8_t test_vqshl_n_s8(int8x8_t in) {
5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshl_n_s8
66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshl_n_s8(in, 1);
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x4_t test_vqshl_n_s16(int16x4_t in) {
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshl_n_s16
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshl_n_s16(in, 1);
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x2_t test_vqshl_n_s32(int32x2_t in) {
17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshl_n_s32
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32> %in, <2 x i32> <i32 1, i32 1>)
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshl_n_s32(in, 1);
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1_t test_vqshl_n_s64(int64x1_t in) {
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshl_n_s64
246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> %in, <1 x i64> <i64 1>)
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshl_n_s64(in, 1);
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vqshlq_n_s8(int8x16_t in) {
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlq_n_s8
316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlq_n_s8(in, 1);
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vqshlq_n_s16(int16x8_t in) {
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlq_n_s16
376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlq_n_s16(in, 1);
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vqshlq_n_s32(int32x4_t in) {
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlq_n_s32
436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlq_n_s32(in, 1);
45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vqshlq_n_s64(int64x2_t in) {
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlq_n_s64
496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> %in, <2 x i64> <i64 1, i64 1>
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlq_n_s64(in, 1);
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x8_t test_vqshl_n_u8(uint8x8_t in) {
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshl_n_u8
556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshl_n_u8(in, 1);
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x4_t test_vqshl_n_u16(uint16x4_t in) {
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshl_n_u16
616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshl_n_u16(in, 1);
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x2_t test_vqshl_n_u32(uint32x2_t in) {
66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshl_n_u32
676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32> %in, <2 x i32> <i32 1, i32 1>)
68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshl_n_u32(in, 1);
69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1_t test_vqshl_n_u64(uint64x1_t in) {
72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshl_n_u64
736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> %in, <1 x i64> <i64 1>)
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshl_n_u64(in, 1);
75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vqshlq_n_u8(uint8x16_t in) {
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlq_n_u8
796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlq_n_u8(in, 1);
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vqshlq_n_u16(uint16x8_t in) {
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlq_n_u16
856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlq_n_u16(in, 1);
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vqshlq_n_u32(uint32x4_t in) {
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlq_n_u32
916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlq_n_u32(in, 1);
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vqshlq_n_u64(uint64x2_t in) {
96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlq_n_u64
976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> %in, <2 x i64> <i64 1, i64 1>
98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlq_n_u64(in, 1);
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8_t test_vrshr_n_s8(int8x8_t in) {
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshr_n_s8
1036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshr_n_s8(in, 1);
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x4_t test_vrshr_n_s16(int16x4_t in) {
108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshr_n_s16
1096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshr_n_s16(in, 1);
111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x2_t test_vrshr_n_s32(int32x2_t in) {
114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshr_n_s32
1156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> %in, <2 x i32> <i32 -1, i32 -1>)
116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshr_n_s32(in, 1);
117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1_t test_vrshr_n_s64(int64x1_t in) {
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshr_n_s64
1216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> %in, <1 x i64> <i64 -1>)
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshr_n_s64(in, 1);
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vrshrq_n_s8(int8x16_t in) {
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshrq_n_s8
1286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrq_n_s8(in, 1);
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vrshrq_n_s16(int16x8_t in) {
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshrq_n_s16
1346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrq_n_s16(in, 1);
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vrshrq_n_s32(int32x4_t in) {
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshrq_n_s32
1406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrq_n_s32(in, 1);
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vrshrq_n_s64(int64x2_t in) {
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshrq_n_s64
1466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> %in, <2 x i64> <i64 -1, i64 -1>
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrq_n_s64(in, 1);
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x8_t test_vrshr_n_u8(uint8x8_t in) {
151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshr_n_u8
1526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
153651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshr_n_u8(in, 1);
154651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x4_t test_vrshr_n_u16(uint16x4_t in) {
157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshr_n_u16
1586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshr_n_u16(in, 1);
160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x2_t test_vrshr_n_u32(uint32x2_t in) {
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshr_n_u32
1646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> %in, <2 x i32> <i32 -1, i32 -1>)
165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshr_n_u32(in, 1);
166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1_t test_vrshr_n_u64(uint64x1_t in) {
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshr_n_u64
1706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> %in, <1 x i64> <i64 -1>)
171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshr_n_u64(in, 1);
172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vrshrq_n_u8(uint8x16_t in) {
175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshrq_n_u8
1766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrq_n_u8(in, 1);
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vrshrq_n_u16(uint16x8_t in) {
181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshrq_n_u16
1826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrq_n_u16(in, 1);
184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vrshrq_n_u32(uint32x4_t in) {
187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshrq_n_u32
1886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrq_n_u32(in, 1);
190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vrshrq_n_u64(uint64x2_t in) {
193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrshrq_n_u64
1946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> %in, <2 x i64> <i64 -1, i64 -1>
195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrq_n_u64(in, 1);
196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8_t test_vqshlu_n_s8(int8x8_t in) {
199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlu_n_s8
2006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlu_n_s8(in, 1);
202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x4_t test_vqshlu_n_s16(int16x4_t in) {
205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlu_n_s16
2066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlu_n_s16(in, 1);
208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x2_t test_vqshlu_n_s32(int32x2_t in) {
211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlu_n_s32
2126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i32> @llvm.aarch64.neon.sqshlu.v2i32(<2 x i32> %in, <2 x i32> <i32 1, i32 1>)
213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlu_n_s32(in, 1);
214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1_t test_vqshlu_n_s64(int64x1_t in) {
217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshlu_n_s64
2186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <1 x i64> @llvm.aarch64.neon.sqshlu.v1i64(<1 x i64> %in, <1 x i64> <i64 1>)
219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshlu_n_s64(in, 1);
220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vqshluq_n_s8(int8x16_t in) {
224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshluq_n_s8
2256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshluq_n_s8(in, 1);
227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vqshluq_n_s16(int16x8_t in) {
230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshluq_n_s16
2316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshluq_n_s16(in, 1);
233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vqshluq_n_s32(int32x4_t in) {
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshluq_n_s32
2376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshluq_n_s32(in, 1);
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vqshluq_n_s64(int64x2_t in) {
242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vqshluq_n_s64
2436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> %in, <2 x i64> <i64 1, i64 1>
244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshluq_n_s64(in, 1);
245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8_t test_vrsra_n_s8(int8x8_t acc, int8x8_t in) {
248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsra_n_s8
2496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <8 x i8> [[TMP]], %acc
251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsra_n_s8(acc, in, 1);
252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x4_t test_vrsra_n_s16(int16x4_t acc, int16x4_t in) {
255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsra_n_s16
2566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <4 x i16> [[TMP]], %acc
258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsra_n_s16(acc, in, 1);
259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x2_t test_vrsra_n_s32(int32x2_t acc, int32x2_t in) {
262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsra_n_s32
2636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <2 x i32> [[TMP]], %acc
265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsra_n_s32(acc, in, 1);
266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
267651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1_t test_vrsra_n_s64(int64x1_t acc, int64x1_t in) {
269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsra_n_s64
2706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <1 x i64> [[TMP]], %acc
272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsra_n_s64(acc, in, 1);
273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vrsraq_n_s8(int8x16_t acc, int8x16_t in) {
276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsraq_n_s8
2776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <16 x i8> [[TMP]], %acc
279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsraq_n_s8(acc, in, 1);
280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vrsraq_n_s16(int16x8_t acc, int16x8_t in) {
283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsraq_n_s16
2846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <8 x i16> [[TMP]], %acc
286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsraq_n_s16(acc, in, 1);
287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vrsraq_n_s32(int32x4_t acc, int32x4_t in) {
290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsraq_n_s32
2916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <4 x i32> [[TMP]], %acc
293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsraq_n_s32(acc, in, 1);
294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vrsraq_n_s64(int64x2_t acc, int64x2_t in) {
297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsraq_n_s64
2986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <2 x i64> [[TMP]], %acc
300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsraq_n_s64(acc, in, 1);
301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
302651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
303651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x8_t test_vrsra_n_u8(uint8x8_t acc, uint8x8_t in) {
304651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsra_n_u8
3056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <8 x i8> [[TMP]], %acc
307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsra_n_u8(acc, in, 1);
308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x4_t test_vrsra_n_u16(uint16x4_t acc, uint16x4_t in) {
311651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsra_n_u16
3126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
313651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <4 x i16> [[TMP]], %acc
314651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsra_n_u16(acc, in, 1);
315651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
316651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
317651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x2_t test_vrsra_n_u32(uint32x2_t acc, uint32x2_t in) {
318651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsra_n_u32
3196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
320651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <2 x i32> [[TMP]], %acc
321651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsra_n_u32(acc, in, 1);
322651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
324651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1_t test_vrsra_n_u64(uint64x1_t acc, uint64x1_t in) {
325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsra_n_u64
3266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <1 x i64> [[TMP]], %acc
328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsra_n_u64(acc, in, 1);
329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
330651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
331651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vrsraq_n_u8(uint8x16_t acc, uint8x16_t in) {
332651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsraq_n_u8
3336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
334651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <16 x i8> [[TMP]], %acc
335651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsraq_n_u8(acc, in, 1);
336651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
337651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
338651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vrsraq_n_u16(uint16x8_t acc, uint16x8_t in) {
339651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsraq_n_u16
3406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
341651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <8 x i16> [[TMP]], %acc
342651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsraq_n_u16(acc, in, 1);
343651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
344651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vrsraq_n_u32(uint32x4_t acc, uint32x4_t in) {
346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsraq_n_u32
3476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
348651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <4 x i32> [[TMP]], %acc
349651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsraq_n_u32(acc, in, 1);
350651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
351651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
352651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vrsraq_n_u64(uint64x2_t acc, uint64x2_t in) {
353651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-LABEL: @test_vrsraq_n_u64
3546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // 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>)
355651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: add <2 x i64> [[TMP]], %acc
356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrsraq_n_u64(acc, in, 1);
357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
358