1 // REQUIRES: aarch64-registered-target
2 // RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -S -O3 -o - %s | FileCheck %s
3 
4 // Test new aarch64 intrinsics and types
5 
6 #include <arm_neon.h>
7 
test_vcombine_s8(int8x8_t low,int8x8_t high)8 int8x16_t test_vcombine_s8(int8x8_t low, int8x8_t high) {
9   // CHECK-LABEL: test_vcombine_s8:
10   return vcombine_s8(low, high);
11   // CHECK: ins	v0.d[1], v1.d[0]
12 }
13 
test_vcombine_s16(int16x4_t low,int16x4_t high)14 int16x8_t test_vcombine_s16(int16x4_t low, int16x4_t high) {
15   // CHECK-LABEL: test_vcombine_s16:
16   return vcombine_s16(low, high);
17   // CHECK: ins	v0.d[1], v1.d[0]
18 }
19 
test_vcombine_s32(int32x2_t low,int32x2_t high)20 int32x4_t test_vcombine_s32(int32x2_t low, int32x2_t high) {
21   // CHECK-LABEL: test_vcombine_s32:
22   return vcombine_s32(low, high);
23   // CHECK: ins	v0.d[1], v1.d[0]
24 }
25 
test_vcombine_s64(int64x1_t low,int64x1_t high)26 int64x2_t test_vcombine_s64(int64x1_t low, int64x1_t high) {
27   // CHECK-LABEL: test_vcombine_s64:
28   return vcombine_s64(low, high);
29   // CHECK: ins	v0.d[1], v1.d[0]
30 }
31 
test_vcombine_u8(uint8x8_t low,uint8x8_t high)32 uint8x16_t test_vcombine_u8(uint8x8_t low, uint8x8_t high) {
33   // CHECK-LABEL: test_vcombine_u8:
34   return vcombine_u8(low, high);
35   // CHECK: ins	v0.d[1], v1.d[0]
36 }
37 
test_vcombine_u16(uint16x4_t low,uint16x4_t high)38 uint16x8_t test_vcombine_u16(uint16x4_t low, uint16x4_t high) {
39   // CHECK-LABEL: test_vcombine_u16:
40   return vcombine_u16(low, high);
41   // CHECK: ins	v0.d[1], v1.d[0]
42 }
43 
test_vcombine_u32(uint32x2_t low,uint32x2_t high)44 uint32x4_t test_vcombine_u32(uint32x2_t low, uint32x2_t high) {
45   // CHECK-LABEL: test_vcombine_u32:
46   return vcombine_u32(low, high);
47   // CHECK: ins	v0.d[1], v1.d[0]
48 }
49 
test_vcombine_u64(uint64x1_t low,uint64x1_t high)50 uint64x2_t test_vcombine_u64(uint64x1_t low, uint64x1_t high) {
51   // CHECK-LABEL: test_vcombine_u64:
52   return vcombine_u64(low, high);
53   // CHECK: ins	v0.d[1], v1.d[0]
54 }
55 
test_vcombine_p64(poly64x1_t low,poly64x1_t high)56 poly64x2_t test_vcombine_p64(poly64x1_t low, poly64x1_t high) {
57   // CHECK-LABEL: test_vcombine_p64:
58   return vcombine_p64(low, high);
59   // CHECK: ins	v0.d[1], v1.d[0]
60 }
61 
test_vcombine_f16(float16x4_t low,float16x4_t high)62 float16x8_t test_vcombine_f16(float16x4_t low, float16x4_t high) {
63   // CHECK-LABEL: test_vcombine_f16:
64   return vcombine_f16(low, high);
65   // CHECK: ins	v0.d[1], v1.d[0]
66 }
67 
test_vcombine_f32(float32x2_t low,float32x2_t high)68 float32x4_t test_vcombine_f32(float32x2_t low, float32x2_t high) {
69   // CHECK-LABEL: test_vcombine_f32:
70   return vcombine_f32(low, high);
71   // CHECK: ins	v0.d[1], v1.d[0]
72 }
73 
test_vcombine_p8(poly8x8_t low,poly8x8_t high)74 poly8x16_t test_vcombine_p8(poly8x8_t low, poly8x8_t high) {
75   // CHECK-LABEL: test_vcombine_p8:
76   return vcombine_p8(low, high);
77   // CHECK: ins	v0.d[1], v1.d[0]
78 }
79 
test_vcombine_p16(poly16x4_t low,poly16x4_t high)80 poly16x8_t test_vcombine_p16(poly16x4_t low, poly16x4_t high) {
81   // CHECK-LABEL: test_vcombine_p16:
82   return vcombine_p16(low, high);
83   // CHECK: ins	v0.d[1], v1.d[0]
84 }
85 
test_vcombine_f64(float64x1_t low,float64x1_t high)86 float64x2_t test_vcombine_f64(float64x1_t low, float64x1_t high) {
87   // CHECK-LABEL: test_vcombine_f64:
88   return vcombine_f64(low, high);
89   // CHECK: ins	v0.d[1], v1.d[0]
90 }
91