xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGen/arm64_vsri.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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 
6*0a6a1f1dSLionel Sambuc // Test ARM64 SIMD vector shift right and insert: vsri[q]_n_*
7*0a6a1f1dSLionel Sambuc 
8*0a6a1f1dSLionel Sambuc #include <arm_neon.h>
9*0a6a1f1dSLionel Sambuc 
test_vsri_n_s8(int8x8_t a1,int8x8_t a2)10*0a6a1f1dSLionel Sambuc int8x8_t test_vsri_n_s8(int8x8_t a1, int8x8_t a2) {
11*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_s8
12*0a6a1f1dSLionel Sambuc   return vsri_n_s8(a1, a2, 3);
13*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v8i8
14*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.8b  v0, v1, #3
15*0a6a1f1dSLionel Sambuc }
16*0a6a1f1dSLionel Sambuc 
test_vsri_n_s16(int16x4_t a1,int16x4_t a2)17*0a6a1f1dSLionel Sambuc int16x4_t test_vsri_n_s16(int16x4_t a1, int16x4_t a2) {
18*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_s16
19*0a6a1f1dSLionel Sambuc   return vsri_n_s16(a1, a2, 3);
20*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v4i16
21*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.4h  v0, v1, #3
22*0a6a1f1dSLionel Sambuc }
23*0a6a1f1dSLionel Sambuc 
test_vsri_n_s32(int32x2_t a1,int32x2_t a2)24*0a6a1f1dSLionel Sambuc int32x2_t test_vsri_n_s32(int32x2_t a1, int32x2_t a2) {
25*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_s32
26*0a6a1f1dSLionel Sambuc   return vsri_n_s32(a1, a2, 1);
27*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v2i32
28*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.2s  v0, v1, #1
29*0a6a1f1dSLionel Sambuc }
30*0a6a1f1dSLionel Sambuc 
test_vsri_n_s64(int64x1_t a1,int64x1_t a2)31*0a6a1f1dSLionel Sambuc int64x1_t test_vsri_n_s64(int64x1_t a1, int64x1_t a2) {
32*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_s64
33*0a6a1f1dSLionel Sambuc   return vsri_n_s64(a1, a2, 1);
34*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v1i64
35*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri     d0, d1, #1
36*0a6a1f1dSLionel Sambuc }
37*0a6a1f1dSLionel Sambuc 
test_vsri_n_u8(uint8x8_t a1,uint8x8_t a2)38*0a6a1f1dSLionel Sambuc uint8x8_t test_vsri_n_u8(uint8x8_t a1, uint8x8_t a2) {
39*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_u8
40*0a6a1f1dSLionel Sambuc   return vsri_n_u8(a1, a2, 3);
41*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v8i8
42*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.8b  v0, v1, #3
43*0a6a1f1dSLionel Sambuc }
44*0a6a1f1dSLionel Sambuc 
test_vsri_n_u16(uint16x4_t a1,uint16x4_t a2)45*0a6a1f1dSLionel Sambuc uint16x4_t test_vsri_n_u16(uint16x4_t a1, uint16x4_t a2) {
46*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_u16
47*0a6a1f1dSLionel Sambuc   return vsri_n_u16(a1, a2, 3);
48*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v4i16
49*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.4h  v0, v1, #3
50*0a6a1f1dSLionel Sambuc }
51*0a6a1f1dSLionel Sambuc 
test_vsri_n_u32(uint32x2_t a1,uint32x2_t a2)52*0a6a1f1dSLionel Sambuc uint32x2_t test_vsri_n_u32(uint32x2_t a1, uint32x2_t a2) {
53*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_u32
54*0a6a1f1dSLionel Sambuc   return vsri_n_u32(a1, a2, 1);
55*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v2i32
56*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.2s  v0, v1, #1
57*0a6a1f1dSLionel Sambuc }
58*0a6a1f1dSLionel Sambuc 
test_vsri_n_u64(uint64x1_t a1,uint64x1_t a2)59*0a6a1f1dSLionel Sambuc uint64x1_t test_vsri_n_u64(uint64x1_t a1, uint64x1_t a2) {
60*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_u64
61*0a6a1f1dSLionel Sambuc   return vsri_n_u64(a1, a2, 1);
62*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v1i64
63*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri     d0, d1, #1
64*0a6a1f1dSLionel Sambuc }
65*0a6a1f1dSLionel Sambuc 
test_vsri_n_p8(poly8x8_t a1,poly8x8_t a2)66*0a6a1f1dSLionel Sambuc poly8x8_t test_vsri_n_p8(poly8x8_t a1, poly8x8_t a2) {
67*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_p8
68*0a6a1f1dSLionel Sambuc   return vsri_n_p8(a1, a2, 1);
69*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v8i8
70*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.8b  v0, v1, #1
71*0a6a1f1dSLionel Sambuc }
72*0a6a1f1dSLionel Sambuc 
test_vsri_n_p16(poly16x4_t a1,poly16x4_t a2)73*0a6a1f1dSLionel Sambuc poly16x4_t test_vsri_n_p16(poly16x4_t a1, poly16x4_t a2) {
74*0a6a1f1dSLionel Sambuc   // CHECK: test_vsri_n_p16
75*0a6a1f1dSLionel Sambuc   return vsri_n_p16(a1, a2, 1);
76*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v4i16
77*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.4h  v0, v1, #1
78*0a6a1f1dSLionel Sambuc }
79*0a6a1f1dSLionel Sambuc 
test_vsriq_n_s8(int8x16_t a1,int8x16_t a2)80*0a6a1f1dSLionel Sambuc int8x16_t test_vsriq_n_s8(int8x16_t a1, int8x16_t a2) {
81*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_s8
82*0a6a1f1dSLionel Sambuc   return vsriq_n_s8(a1, a2, 3);
83*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v16i8
84*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.16b v0, v1, #3
85*0a6a1f1dSLionel Sambuc }
86*0a6a1f1dSLionel Sambuc 
test_vsriq_n_s16(int16x8_t a1,int16x8_t a2)87*0a6a1f1dSLionel Sambuc int16x8_t test_vsriq_n_s16(int16x8_t a1, int16x8_t a2) {
88*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_s16
89*0a6a1f1dSLionel Sambuc   return vsriq_n_s16(a1, a2, 3);
90*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v8i16
91*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.8h  v0, v1, #3
92*0a6a1f1dSLionel Sambuc }
93*0a6a1f1dSLionel Sambuc 
test_vsriq_n_s32(int32x4_t a1,int32x4_t a2)94*0a6a1f1dSLionel Sambuc int32x4_t test_vsriq_n_s32(int32x4_t a1, int32x4_t a2) {
95*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_s32
96*0a6a1f1dSLionel Sambuc   return vsriq_n_s32(a1, a2, 1);
97*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v4i32
98*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.4s  v0, v1, #1
99*0a6a1f1dSLionel Sambuc }
100*0a6a1f1dSLionel Sambuc 
test_vsriq_n_s64(int64x2_t a1,int64x2_t a2)101*0a6a1f1dSLionel Sambuc int64x2_t test_vsriq_n_s64(int64x2_t a1, int64x2_t a2) {
102*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_s64
103*0a6a1f1dSLionel Sambuc   return vsriq_n_s64(a1, a2, 1);
104*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v2i64
105*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.2d  v0, v1, #1
106*0a6a1f1dSLionel Sambuc }
107*0a6a1f1dSLionel Sambuc 
test_vsriq_n_u8(uint8x16_t a1,uint8x16_t a2)108*0a6a1f1dSLionel Sambuc uint8x16_t test_vsriq_n_u8(uint8x16_t a1, uint8x16_t a2) {
109*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_u8
110*0a6a1f1dSLionel Sambuc   return vsriq_n_u8(a1, a2, 3);
111*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v16i8
112*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.16b v0, v1, #3
113*0a6a1f1dSLionel Sambuc }
114*0a6a1f1dSLionel Sambuc 
test_vsriq_n_u16(uint16x8_t a1,uint16x8_t a2)115*0a6a1f1dSLionel Sambuc uint16x8_t test_vsriq_n_u16(uint16x8_t a1, uint16x8_t a2) {
116*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_u16
117*0a6a1f1dSLionel Sambuc   return vsriq_n_u16(a1, a2, 3);
118*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v8i16
119*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.8h  v0, v1, #3
120*0a6a1f1dSLionel Sambuc }
121*0a6a1f1dSLionel Sambuc 
test_vsriq_n_u32(uint32x4_t a1,uint32x4_t a2)122*0a6a1f1dSLionel Sambuc uint32x4_t test_vsriq_n_u32(uint32x4_t a1, uint32x4_t a2) {
123*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_u32
124*0a6a1f1dSLionel Sambuc   return vsriq_n_u32(a1, a2, 1);
125*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v4i32
126*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.4s  v0, v1, #1
127*0a6a1f1dSLionel Sambuc }
128*0a6a1f1dSLionel Sambuc 
test_vsriq_n_u64(uint64x2_t a1,uint64x2_t a2)129*0a6a1f1dSLionel Sambuc uint64x2_t test_vsriq_n_u64(uint64x2_t a1, uint64x2_t a2) {
130*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_u64
131*0a6a1f1dSLionel Sambuc   return vsriq_n_u64(a1, a2, 1);
132*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v2i64
133*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.2d  v0, v1, #1
134*0a6a1f1dSLionel Sambuc }
135*0a6a1f1dSLionel Sambuc 
test_vsriq_n_p8(poly8x16_t a1,poly8x16_t a2)136*0a6a1f1dSLionel Sambuc poly8x16_t test_vsriq_n_p8(poly8x16_t a1, poly8x16_t a2) {
137*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_p8
138*0a6a1f1dSLionel Sambuc   return vsriq_n_p8(a1, a2, 1);
139*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v16i8
140*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.16b v0, v1, #1
141*0a6a1f1dSLionel Sambuc }
142*0a6a1f1dSLionel Sambuc 
test_vsriq_n_p16(poly16x8_t a1,poly16x8_t a2)143*0a6a1f1dSLionel Sambuc poly16x8_t test_vsriq_n_p16(poly16x8_t a1, poly16x8_t a2) {
144*0a6a1f1dSLionel Sambuc   // CHECK: test_vsriq_n_p16
145*0a6a1f1dSLionel Sambuc   return vsriq_n_p16(a1, a2, 1);
146*0a6a1f1dSLionel Sambuc   // CHECK: llvm.aarch64.neon.vsri.v8i16
147*0a6a1f1dSLionel Sambuc   // CHECK_CODEGEN: sri.8h  v0, v1, #1
148*0a6a1f1dSLionel Sambuc }
149*0a6a1f1dSLionel Sambuc 
150