1 // RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - -emit-llvm %s | FileCheck %s
2 // RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - %s | \
3 // RUN:   FileCheck -check-prefix=CHECK_CODEGEN %s
4 // REQUIRES: aarch64-registered-target
5 // Test
6 
7 #include <arm_neon.h>
8 
test_vsli_n_s8(int8x8_t a1,int8x8_t a2)9 int8x8_t test_vsli_n_s8(int8x8_t a1, int8x8_t a2) {
10   // CHECK: test_vsli_n_s8
11   return vsli_n_s8(a1, a2, 3);
12   // CHECK: llvm.aarch64.neon.vsli.v8i8
13   // CHECK_CODEGEN: sli.8b  v0, v1, #3
14 }
15 
test_vsli_n_s16(int16x4_t a1,int16x4_t a2)16 int16x4_t test_vsli_n_s16(int16x4_t a1, int16x4_t a2) {
17   // CHECK: test_vsli_n_s16
18   return vsli_n_s16(a1, a2, 3);
19   // CHECK: llvm.aarch64.neon.vsli.v4i16
20   // CHECK_CODEGEN: sli.4h  v0, v1, #3
21 }
22 
test_vsli_n_s32(int32x2_t a1,int32x2_t a2)23 int32x2_t test_vsli_n_s32(int32x2_t a1, int32x2_t a2) {
24   // CHECK: test_vsli_n_s32
25   return vsli_n_s32(a1, a2, 1);
26   // CHECK: llvm.aarch64.neon.vsli.v2i32
27   // CHECK_CODEGEN: sli.2s  v0, v1, #1
28 }
29 
test_vsli_n_s64(int64x1_t a1,int64x1_t a2)30 int64x1_t test_vsli_n_s64(int64x1_t a1, int64x1_t a2) {
31   // CHECK: test_vsli_n_s64
32   return vsli_n_s64(a1, a2, 1);
33   // CHECK: llvm.aarch64.neon.vsli.v1i64
34   // CHECK_CODEGEN: sli     d0, d1, #1
35 }
36 
test_vsli_n_u8(uint8x8_t a1,uint8x8_t a2)37 uint8x8_t test_vsli_n_u8(uint8x8_t a1, uint8x8_t a2) {
38   // CHECK: test_vsli_n_u8
39   return vsli_n_u8(a1, a2, 3);
40   // CHECK: llvm.aarch64.neon.vsli.v8i8
41   // CHECK_CODEGEN: sli.8b  v0, v1, #3
42 }
43 
test_vsli_n_u16(uint16x4_t a1,uint16x4_t a2)44 uint16x4_t test_vsli_n_u16(uint16x4_t a1, uint16x4_t a2) {
45   // CHECK: test_vsli_n_u16
46   return vsli_n_u16(a1, a2, 3);
47   // CHECK: llvm.aarch64.neon.vsli.v4i16
48   // CHECK_CODEGEN: sli.4h  v0, v1, #3
49 }
50 
test_vsli_n_u32(uint32x2_t a1,uint32x2_t a2)51 uint32x2_t test_vsli_n_u32(uint32x2_t a1, uint32x2_t a2) {
52   // CHECK: test_vsli_n_u32
53   return vsli_n_u32(a1, a2, 1);
54   // CHECK: llvm.aarch64.neon.vsli.v2i32
55   // CHECK_CODEGEN: sli.2s  v0, v1, #1
56 }
57 
test_vsli_n_u64(uint64x1_t a1,uint64x1_t a2)58 uint64x1_t test_vsli_n_u64(uint64x1_t a1, uint64x1_t a2) {
59   // CHECK: test_vsli_n_u64
60   return vsli_n_u64(a1, a2, 1);
61   // CHECK: llvm.aarch64.neon.vsli.v1i64
62   // CHECK_CODEGEN: sli     d0, d1, #1
63 }
64 
test_vsli_n_p8(poly8x8_t a1,poly8x8_t a2)65 poly8x8_t test_vsli_n_p8(poly8x8_t a1, poly8x8_t a2) {
66   // CHECK: test_vsli_n_p8
67   return vsli_n_p8(a1, a2, 1);
68   // CHECK: llvm.aarch64.neon.vsli.v8i8
69   // CHECK_CODEGEN: sli.8b  v0, v1, #1
70 }
71 
test_vsli_n_p16(poly16x4_t a1,poly16x4_t a2)72 poly16x4_t test_vsli_n_p16(poly16x4_t a1, poly16x4_t a2) {
73   // CHECK: test_vsli_n_p16
74   return vsli_n_p16(a1, a2, 1);
75   // CHECK: llvm.aarch64.neon.vsli.v4i16
76   // CHECK_CODEGEN: sli.4h  v0, v1, #1
77 }
78 
test_vsliq_n_s8(int8x16_t a1,int8x16_t a2)79 int8x16_t test_vsliq_n_s8(int8x16_t a1, int8x16_t a2) {
80   // CHECK: test_vsliq_n_s8
81   return vsliq_n_s8(a1, a2, 3);
82   // CHECK: llvm.aarch64.neon.vsli.v16i8
83   // CHECK_CODEGEN: sli.16b v0, v1, #3
84 }
85 
test_vsliq_n_s16(int16x8_t a1,int16x8_t a2)86 int16x8_t test_vsliq_n_s16(int16x8_t a1, int16x8_t a2) {
87   // CHECK: test_vsliq_n_s16
88   return vsliq_n_s16(a1, a2, 3);
89   // CHECK: llvm.aarch64.neon.vsli.v8i16
90   // CHECK_CODEGEN: sli.8h  v0, v1, #3
91 }
92 
test_vsliq_n_s32(int32x4_t a1,int32x4_t a2)93 int32x4_t test_vsliq_n_s32(int32x4_t a1, int32x4_t a2) {
94   // CHECK: test_vsliq_n_s32
95   return vsliq_n_s32(a1, a2, 1);
96   // CHECK: llvm.aarch64.neon.vsli.v4i32
97   // CHECK_CODEGEN: sli.4s  v0, v1, #1
98 }
99 
test_vsliq_n_s64(int64x2_t a1,int64x2_t a2)100 int64x2_t test_vsliq_n_s64(int64x2_t a1, int64x2_t a2) {
101   // CHECK: test_vsliq_n_s64
102   return vsliq_n_s64(a1, a2, 1);
103   // CHECK: llvm.aarch64.neon.vsli.v2i64
104   // CHECK_CODEGEN: sli.2d  v0, v1, #1
105 }
106 
test_vsliq_n_u8(uint8x16_t a1,uint8x16_t a2)107 uint8x16_t test_vsliq_n_u8(uint8x16_t a1, uint8x16_t a2) {
108   // CHECK: test_vsliq_n_u8
109   return vsliq_n_u8(a1, a2, 3);
110   // CHECK: llvm.aarch64.neon.vsli.v16i8
111   // CHECK_CODEGEN: sli.16b v0, v1, #3
112 }
113 
test_vsliq_n_u16(uint16x8_t a1,uint16x8_t a2)114 uint16x8_t test_vsliq_n_u16(uint16x8_t a1, uint16x8_t a2) {
115   // CHECK: test_vsliq_n_u16
116   return vsliq_n_u16(a1, a2, 3);
117   // CHECK: llvm.aarch64.neon.vsli.v8i16
118   // CHECK_CODEGEN: sli.8h  v0, v1, #3
119 }
120 
test_vsliq_n_u32(uint32x4_t a1,uint32x4_t a2)121 uint32x4_t test_vsliq_n_u32(uint32x4_t a1, uint32x4_t a2) {
122   // CHECK: test_vsliq_n_u32
123   return vsliq_n_u32(a1, a2, 1);
124   // CHECK: llvm.aarch64.neon.vsli.v4i32
125   // CHECK_CODEGEN: sli.4s  v0, v1, #1
126 }
127 
test_vsliq_n_u64(uint64x2_t a1,uint64x2_t a2)128 uint64x2_t test_vsliq_n_u64(uint64x2_t a1, uint64x2_t a2) {
129   // CHECK: test_vsliq_n_u64
130   return vsliq_n_u64(a1, a2, 1);
131   // CHECK: llvm.aarch64.neon.vsli.v2i64
132   // CHECK_CODEGEN: sli.2d  v0, v1, #1
133 }
134 
test_vsliq_n_p8(poly8x16_t a1,poly8x16_t a2)135 poly8x16_t test_vsliq_n_p8(poly8x16_t a1, poly8x16_t a2) {
136   // CHECK: test_vsliq_n_p8
137   return vsliq_n_p8(a1, a2, 1);
138   // CHECK: llvm.aarch64.neon.vsli.v16i8
139   // CHECK_CODEGEN: sli.16b v0, v1, #1
140 }
141 
test_vsliq_n_p16(poly16x8_t a1,poly16x8_t a2)142 poly16x8_t test_vsliq_n_p16(poly16x8_t a1, poly16x8_t a2) {
143   // CHECK: test_vsliq_n_p16
144   return vsliq_n_p16(a1, a2, 1);
145   // CHECK: llvm.aarch64.neon.vsli.v8i16
146   // CHECK_CODEGEN: sli.8h  v0, v1, #1
147 }
148 
149