1// REQUIRES: aarch64-registered-target
2// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
3// RUN:   -ffp-contract=fast -S -O3 -o - %s | FileCheck %s --check-prefix CHECK-COMMON --check-prefix CHECK-ARM64
4
5// Test new aarch64 intrinsics and types
6
7#include <arm_neon.h>
8
9int8x8_t test_vget_high_s8(int8x16_t a) {
10  // CHECK-COMMON-LABEL: test_vget_high_s8:
11  return vget_high_s8(a);
12  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
13}
14
15int16x4_t test_vget_high_s16(int16x8_t a) {
16  // CHECK-COMMON-LABEL: test_vget_high_s16:
17  return vget_high_s16(a);
18  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
19}
20
21int32x2_t test_vget_high_s32(int32x4_t a) {
22  // CHECK-COMMON-LABEL: test_vget_high_s32:
23  return vget_high_s32(a);
24  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
25}
26
27int64x1_t test_vget_high_s64(int64x2_t a) {
28  // CHECK-COMMON-LABEL: test_vget_high_s64:
29  return vget_high_s64(a);
30  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
31}
32
33uint8x8_t test_vget_high_u8(uint8x16_t a) {
34  // CHECK-COMMON-LABEL: test_vget_high_u8:
35  return vget_high_u8(a);
36  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
37}
38
39uint16x4_t test_vget_high_u16(uint16x8_t a) {
40  // CHECK-COMMON-LABEL: test_vget_high_u16:
41  return vget_high_u16(a);
42  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
43}
44
45uint32x2_t test_vget_high_u32(uint32x4_t a) {
46  // CHECK-COMMON-LABEL: test_vget_high_u32:
47  return vget_high_u32(a);
48  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
49}
50
51uint64x1_t test_vget_high_u64(uint64x2_t a) {
52  // CHECK-COMMON-LABEL: test_vget_high_u64:
53  return vget_high_u64(a);
54  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
55}
56
57poly64x1_t test_vget_high_p64(poly64x2_t a) {
58  // CHECK-COMMON-LABEL: test_vget_high_p64:
59  return vget_high_p64(a);
60  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
61}
62
63float16x4_t test_vget_high_f16(float16x8_t a) {
64  // CHECK-COMMON-LABEL: test_vget_high_f16:
65  return vget_high_f16(a);
66  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
67}
68
69float32x2_t test_vget_high_f32(float32x4_t a) {
70  // CHECK-COMMON-LABEL: test_vget_high_f32:
71  return vget_high_f32(a);
72  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
73}
74
75poly8x8_t test_vget_high_p8(poly8x16_t a) {
76  // CHECK-COMMON-LABEL: test_vget_high_p8:
77  return vget_high_p8(a);
78  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
79}
80
81poly16x4_t test_vget_high_p16(poly16x8_t a) {
82  // CHECK-COMMON-LABEL: test_vget_high_p16
83  return vget_high_p16(a);
84  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
85}
86
87float64x1_t test_vget_high_f64(float64x2_t a) {
88  // CHECK-COMMON-LABEL: test_vget_high_f64
89  return vget_high_f64(a);
90  // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
91}
92
93int8x8_t test_vget_low_s8(int8x16_t a) {
94  // CHECK-COMMON-LABEL: test_vget_low_s8:
95  return vget_low_s8(a);
96  // CHECK-COMMON-NEXT: ret
97}
98
99int16x4_t test_vget_low_s16(int16x8_t a) {
100  // CHECK-COMMON-LABEL: test_vget_low_s16:
101  return vget_low_s16(a);
102  // CHECK-COMMON-NEXT: ret
103}
104
105int32x2_t test_vget_low_s32(int32x4_t a) {
106  // CHECK-COMMON-LABEL: test_vget_low_s32:
107  return vget_low_s32(a);
108  // CHECK-COMMON-NEXT: ret
109}
110
111int64x1_t test_vget_low_s64(int64x2_t a) {
112  // CHECK-COMMON-LABEL: test_vget_low_s64:
113  return vget_low_s64(a);
114  // CHECK-COMMON-NEXT: ret
115}
116
117uint8x8_t test_vget_low_u8(uint8x16_t a) {
118  // CHECK-COMMON-LABEL: test_vget_low_u8:
119  return vget_low_u8(a);
120  // CHECK-COMMON-NEXT: ret
121}
122
123uint16x4_t test_vget_low_u16(uint16x8_t a) {
124  // CHECK-COMMON-LABEL: test_vget_low_u16:
125  return vget_low_u16(a);
126  // CHECK-COMMON-NEXT: ret
127}
128
129uint32x2_t test_vget_low_u32(uint32x4_t a) {
130  // CHECK-COMMON-LABEL: test_vget_low_u32:
131  return vget_low_u32(a);
132  // CHECK-COMMON-NEXT: ret
133}
134
135uint64x1_t test_vget_low_u64(uint64x2_t a) {
136  // CHECK-COMMON-LABEL: test_vget_low_u64:
137  return vget_low_u64(a);
138  // CHECK-COMMON-NEXT: ret
139}
140
141poly64x1_t test_vget_low_p64(poly64x2_t a) {
142  // CHECK-COMMON-LABEL: test_vget_low_p64:
143  return vget_low_p64(a);
144  // CHECK-COMMON-NEXT: ret
145}
146
147float16x4_t test_vget_low_f16(float16x8_t a) {
148  // CHECK-COMMON-LABEL: test_vget_low_f16:
149  return vget_low_f16(a);
150  // CHECK-COMMON-NEXT: ret
151}
152
153float32x2_t test_vget_low_f32(float32x4_t a) {
154  // CHECK-COMMON-LABEL: test_vget_low_f32:
155  return vget_low_f32(a);
156  // CHECK-COMMON-NEXT: ret
157}
158
159poly8x8_t test_vget_low_p8(poly8x16_t a) {
160  // CHECK-COMMON-LABEL: test_vget_low_p8:
161  return vget_low_p8(a);
162  // CHECK-COMMON-NEXT: ret
163}
164
165poly16x4_t test_vget_low_p16(poly16x8_t a) {
166  // CHECK-COMMON-LABEL: test_vget_low_p16:
167  return vget_low_p16(a);
168  // CHECK-COMMON-NEXT: ret
169}
170
171float64x1_t test_vget_low_f64(float64x2_t a) {
172  // CHECK-COMMON-LABEL: test_vget_low_f64:
173  return vget_low_f64(a);
174  // CHECK-COMMON-NEXT: ret
175}
176
177