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