16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - -emit-llvm %s | FileCheck %s
26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - %s | \
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN:   FileCheck -check-prefix=CHECK_CODEGEN %s
4c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// REQUIRES: aarch64-registered-target
5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Test
6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <arm_neon.h>
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8_t test_vsli_n_s8(int8x8_t a1, int8x8_t a2) {
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_s8
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_s8(a1, a2, 3);
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v8i8
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.8b  v0, v1, #3
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x4_t test_vsli_n_s16(int16x4_t a1, int16x4_t a2) {
17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_s16
18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_s16(a1, a2, 3);
196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v4i16
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.4h  v0, v1, #3
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x2_t test_vsli_n_s32(int32x2_t a1, int32x2_t a2) {
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_s32
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_s32(a1, a2, 1);
266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v2i32
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.2s  v0, v1, #1
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1_t test_vsli_n_s64(int64x1_t a1, int64x1_t a2) {
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_s64
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_s64(a1, a2, 1);
336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v1i64
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli     d0, d1, #1
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x8_t test_vsli_n_u8(uint8x8_t a1, uint8x8_t a2) {
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_u8
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_u8(a1, a2, 3);
406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v8i8
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.8b  v0, v1, #3
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x4_t test_vsli_n_u16(uint16x4_t a1, uint16x4_t a2) {
45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_u16
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_u16(a1, a2, 3);
476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v4i16
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.4h  v0, v1, #3
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x2_t test_vsli_n_u32(uint32x2_t a1, uint32x2_t a2) {
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_u32
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_u32(a1, a2, 1);
546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v2i32
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.2s  v0, v1, #1
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1_t test_vsli_n_u64(uint64x1_t a1, uint64x1_t a2) {
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_u64
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_u64(a1, a2, 1);
616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v1i64
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli     d0, d1, #1
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x8_t test_vsli_n_p8(poly8x8_t a1, poly8x8_t a2) {
66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_p8
67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_p8(a1, a2, 1);
686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v8i8
69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.8b  v0, v1, #1
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly16x4_t test_vsli_n_p16(poly16x4_t a1, poly16x4_t a2) {
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsli_n_p16
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsli_n_p16(a1, a2, 1);
756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v4i16
76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.4h  v0, v1, #1
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vsliq_n_s8(int8x16_t a1, int8x16_t a2) {
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_s8
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_s8(a1, a2, 3);
826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v16i8
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.16b v0, v1, #3
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vsliq_n_s16(int16x8_t a1, int16x8_t a2) {
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_s16
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_s16(a1, a2, 3);
896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v8i16
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.8h  v0, v1, #3
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vsliq_n_s32(int32x4_t a1, int32x4_t a2) {
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_s32
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_s32(a1, a2, 1);
966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v4i32
97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.4s  v0, v1, #1
98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vsliq_n_s64(int64x2_t a1, int64x2_t a2) {
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_s64
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_s64(a1, a2, 1);
1036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v2i64
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.2d  v0, v1, #1
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vsliq_n_u8(uint8x16_t a1, uint8x16_t a2) {
108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_u8
109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_u8(a1, a2, 3);
1106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v16i8
111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.16b v0, v1, #3
112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vsliq_n_u16(uint16x8_t a1, uint16x8_t a2) {
115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_u16
116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_u16(a1, a2, 3);
1176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v8i16
118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.8h  v0, v1, #3
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vsliq_n_u32(uint32x4_t a1, uint32x4_t a2) {
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_u32
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_u32(a1, a2, 1);
1246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v4i32
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.4s  v0, v1, #1
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vsliq_n_u64(uint64x2_t a1, uint64x2_t a2) {
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_u64
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_u64(a1, a2, 1);
1316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v2i64
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.2d  v0, v1, #1
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x16_t test_vsliq_n_p8(poly8x16_t a1, poly8x16_t a2) {
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_p8
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_p8(a1, a2, 1);
1386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v16i8
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.16b v0, v1, #1
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly16x8_t test_vsliq_n_p16(poly16x8_t a1, poly16x8_t a2) {
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: test_vsliq_n_p16
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsliq_n_p16(a1, a2, 1);
1456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: llvm.aarch64.neon.vsli.v8i16
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK_CODEGEN: sli.8h  v0, v1, #1
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
149