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
9int8x8_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
16int16x4_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
23int32x2_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
30int64x1_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
37uint8x8_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
44uint16x4_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
51uint32x2_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
58uint64x1_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
65poly8x8_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
72poly16x4_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
79int8x16_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
86int16x8_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
93int32x4_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
100int64x2_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
107uint8x16_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
114uint16x8_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
121uint32x4_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
128uint64x2_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
135poly8x16_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
142poly16x8_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