1 // RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - -emit-llvm %s | FileCheck %s
2 // Test ARM64 SIMD load and stores of an N-element structure intrinsics
3
4 #include <arm_neon.h>
5
test_vld2q_lane_s64(const void * a1,int64x2x2_t a2)6 int64x2x2_t test_vld2q_lane_s64(const void * a1, int64x2x2_t a2) {
7 // CHECK: test_vld2q_lane_s64
8 return vld2q_lane_s64(a1, a2, 1);
9 // CHECK: llvm.aarch64.neon.ld2lane.v2i64.p0i8
10 }
11
test_vld2q_lane_u64(const void * a1,uint64x2x2_t a2)12 uint64x2x2_t test_vld2q_lane_u64(const void * a1, uint64x2x2_t a2) {
13 // CHECK: test_vld2q_lane_u64
14 return vld2q_lane_u64(a1, a2, 1);
15 // CHECK: llvm.aarch64.neon.ld2lane.v2i64.p0i8
16 }
17
test_vld2_lane_s64(const void * a1,int64x1x2_t a2)18 int64x1x2_t test_vld2_lane_s64(const void * a1, int64x1x2_t a2) {
19 // CHECK: test_vld2_lane_s64
20 return vld2_lane_s64(a1, a2, 0);
21 // CHECK: llvm.aarch64.neon.ld2lane.v1i64.p0i8
22 }
23
test_vld2_lane_u64(const void * a1,uint64x1x2_t a2)24 uint64x1x2_t test_vld2_lane_u64(const void * a1, uint64x1x2_t a2) {
25 // CHECK: test_vld2_lane_u64
26 return vld2_lane_u64(a1, a2, 0);
27 // CHECK: llvm.aarch64.neon.ld2lane.v1i64.p0i8
28 }
29
test_vld2q_lane_p8(const void * a1,poly8x16x2_t a2)30 poly8x16x2_t test_vld2q_lane_p8(const void * a1, poly8x16x2_t a2) {
31 // CHECK: test_vld2q_lane_p8
32 return vld2q_lane_p8(a1, a2, 0);
33 // CHECK: extractvalue {{.*}} 0{{ *$}}
34 // CHECK: extractvalue {{.*}} 1{{ *$}}
35 }
36
test_vld2q_lane_u8(const void * a1,uint8x16x2_t a2)37 uint8x16x2_t test_vld2q_lane_u8(const void * a1, uint8x16x2_t a2) {
38 // CHECK: test_vld2q_lane_u8
39 return vld2q_lane_u8(a1, a2, 0);
40 // CHECK: llvm.aarch64.neon.ld2lane.v16i8.p0i8
41 }
42
test_vld3q_lane_s64(const void * a1,int64x2x3_t a2)43 int64x2x3_t test_vld3q_lane_s64(const void * a1, int64x2x3_t a2) {
44 // CHECK: test_vld3q_lane_s64
45 return vld3q_lane_s64(a1, a2, 1);
46 // CHECK: llvm.aarch64.neon.ld3lane.v2i64.p0i8
47 }
48
test_vld3q_lane_u64(const void * a1,uint64x2x3_t a2)49 uint64x2x3_t test_vld3q_lane_u64(const void * a1, uint64x2x3_t a2) {
50 // CHECK: test_vld3q_lane_u64
51 return vld3q_lane_u64(a1, a2, 1);
52 // CHECK: llvm.aarch64.neon.ld3lane.v2i64.p0i8
53 }
54
test_vld3_lane_s64(const void * a1,int64x1x3_t a2)55 int64x1x3_t test_vld3_lane_s64(const void * a1, int64x1x3_t a2) {
56 // CHECK: test_vld3_lane_s64
57 return vld3_lane_s64(a1, a2, 0);
58 // CHECK: llvm.aarch64.neon.ld3lane.v1i64.p0i8
59 }
60
test_vld3_lane_u64(const void * a1,uint64x1x3_t a2)61 uint64x1x3_t test_vld3_lane_u64(const void * a1, uint64x1x3_t a2) {
62 // CHECK: test_vld3_lane_u64
63 return vld3_lane_u64(a1, a2, 0);
64 // CHECK: llvm.aarch64.neon.ld3lane.v1i64.p0i8
65 }
66
test_vld3_lane_s8(const void * a1,int8x8x3_t a2)67 int8x8x3_t test_vld3_lane_s8(const void * a1, int8x8x3_t a2) {
68 // CHECK: test_vld3_lane_s8
69 return vld3_lane_s8(a1, a2, 0);
70 // CHECK: llvm.aarch64.neon.ld3lane.v8i8.p0i8
71 }
72
test_vld3q_lane_p8(const void * a1,poly8x16x3_t a2)73 poly8x16x3_t test_vld3q_lane_p8(const void * a1, poly8x16x3_t a2) {
74 // CHECK: test_vld3q_lane_p8
75 return vld3q_lane_p8(a1, a2, 0);
76 // CHECK: llvm.aarch64.neon.ld3lane.v16i8.p0i8
77 }
78
test_vld3q_lane_u8(const void * a1,uint8x16x3_t a2)79 uint8x16x3_t test_vld3q_lane_u8(const void * a1, uint8x16x3_t a2) {
80 // CHECK: test_vld3q_lane_u8
81 return vld3q_lane_u8(a1, a2, 0);
82 // CHECK: llvm.aarch64.neon.ld3lane.v16i8.p0i8
83 }
84
test_vld4q_lane_s64(const void * a1,int64x2x4_t a2)85 int64x2x4_t test_vld4q_lane_s64(const void * a1, int64x2x4_t a2) {
86 // CHECK: test_vld4q_lane_s64
87 return vld4q_lane_s64(a1, a2, 0);
88 // CHECK: llvm.aarch64.neon.ld4lane.v2i64.p0i8
89 }
90
test_vld4q_lane_u64(const void * a1,uint64x2x4_t a2)91 uint64x2x4_t test_vld4q_lane_u64(const void * a1, uint64x2x4_t a2) {
92 // CHECK: test_vld4q_lane_u64
93 return vld4q_lane_u64(a1, a2, 0);
94 // CHECK: llvm.aarch64.neon.ld4lane.v2i64.p0i8
95 }
96
test_vld4_lane_s64(const void * a1,int64x1x4_t a2)97 int64x1x4_t test_vld4_lane_s64(const void * a1, int64x1x4_t a2) {
98 // CHECK: test_vld4_lane_s64
99 return vld4_lane_s64(a1, a2, 0);
100 // CHECK: llvm.aarch64.neon.ld4lane.v1i64.p0i8
101 }
102
test_vld4_lane_u64(const void * a1,uint64x1x4_t a2)103 uint64x1x4_t test_vld4_lane_u64(const void * a1, uint64x1x4_t a2) {
104 // CHECK: test_vld4_lane_u64
105 return vld4_lane_u64(a1, a2, 0);
106 // CHECK: llvm.aarch64.neon.ld4lane.v1i64.p0i8
107 }
108
test_vld4_lane_s8(const void * a1,int8x8x4_t a2)109 int8x8x4_t test_vld4_lane_s8(const void * a1, int8x8x4_t a2) {
110 // CHECK: test_vld4_lane_s8
111 return vld4_lane_s8(a1, a2, 0);
112 // CHECK: llvm.aarch64.neon.ld4lane.v8i8.p0i8
113 }
114
test_vld4_lane_u8(const void * a1,uint8x8x4_t a2)115 uint8x8x4_t test_vld4_lane_u8(const void * a1, uint8x8x4_t a2) {
116 // CHECK: test_vld4_lane_u8
117 return vld4_lane_u8(a1, a2, 0);
118 // CHECK: llvm.aarch64.neon.ld4lane.v8i8.p0i8
119 }
120
test_vld4q_lane_p8(const void * a1,poly8x16x4_t a2)121 poly8x16x4_t test_vld4q_lane_p8(const void * a1, poly8x16x4_t a2) {
122 // CHECK: test_vld4q_lane_p8
123 return vld4q_lane_p8(a1, a2, 0);
124 // CHECK: llvm.aarch64.neon.ld4lane.v16i8.p0i8
125 }
126
test_vld4q_lane_s8(const void * a1,int8x16x4_t a2)127 int8x16x4_t test_vld4q_lane_s8(const void * a1, int8x16x4_t a2) {
128 // CHECK: test_vld4q_lane_s8
129 return vld4q_lane_s8(a1, a2, 0);
130 // CHECK: extractvalue {{.*}} 0{{ *$}}
131 // CHECK: extractvalue {{.*}} 1{{ *$}}
132 // CHECK: extractvalue {{.*}} 2{{ *$}}
133 // CHECK: extractvalue {{.*}} 3{{ *$}}
134 }
135
test_vld4q_lane_u8(const void * a1,uint8x16x4_t a2)136 uint8x16x4_t test_vld4q_lane_u8(const void * a1, uint8x16x4_t a2) {
137 // CHECK: test_vld4q_lane_u8
138 return vld4q_lane_u8(a1, a2, 0);
139 // CHECK: llvm.aarch64.neon.ld4lane.v16i8.p0i8
140 }
141
142