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