annotate clang/test/Sema/aarch64-neon-ranges.c @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon -ffreestanding -fsyntax-only -verify %s
anatofuz
parents:
diff changeset
2 // RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature +neon -ffreestanding -fsyntax-only -verify %s
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 #include <arm_neon.h>
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 void test_vext_8bit(int8x8_t small, int8x16_t big) {
anatofuz
parents:
diff changeset
7 vext_s8(small, small, 7);
anatofuz
parents:
diff changeset
8 vext_u8(small, small, 7);
anatofuz
parents:
diff changeset
9 vext_p8(small, small, 7);
anatofuz
parents:
diff changeset
10 vextq_s8(big, big, 15);
anatofuz
parents:
diff changeset
11 vextq_u8(big, big, 15);
anatofuz
parents:
diff changeset
12 vextq_p8(big, big, 15);
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 vext_s8(small, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
15 vext_u8(small, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
16 vext_p8(small, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
17 vextq_s8(big, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
18 vextq_u8(big, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
19 vextq_p8(big, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
20 }
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 void test_mul_lane_f64(float64x1_t small, float64x2_t big, float64x2_t rhs) {
anatofuz
parents:
diff changeset
23 vmul_lane_f64(small, small, 0);
anatofuz
parents:
diff changeset
24 vmul_laneq_f64(small, big, 1);
anatofuz
parents:
diff changeset
25 vmulq_lane_f64(big, small, 0);
anatofuz
parents:
diff changeset
26 vmulq_laneq_f64(big, big, 1);
anatofuz
parents:
diff changeset
27 vfma_lane_f64(small, small, small, 0);
anatofuz
parents:
diff changeset
28 vfma_laneq_f64(small, small, big, 1);
anatofuz
parents:
diff changeset
29 vfmaq_lane_f64(big, big, small, 0);
anatofuz
parents:
diff changeset
30 vfmaq_laneq_f64(big, big, big, 1);
anatofuz
parents:
diff changeset
31
anatofuz
parents:
diff changeset
32 vmul_lane_f64(small, small, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
33 vmul_laneq_f64(small, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
34 vfma_lane_f64(small, small, small, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
35 vfma_laneq_f64(small, small, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
36 vfmaq_laneq_f64(big, big, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
37 }
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 void test_ld1st1(int8x8_t small, int8x16_t big, void *addr) {
anatofuz
parents:
diff changeset
40 vld1_lane_s8(addr, small, 7);
anatofuz
parents:
diff changeset
41 vld1_lane_s16(addr, small, 3);
anatofuz
parents:
diff changeset
42 vld1_lane_s32(addr, small, 1);
anatofuz
parents:
diff changeset
43 vld1_lane_s64(addr, small, 0);
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 vld1q_lane_s8(addr, big, 15);
anatofuz
parents:
diff changeset
46 vld1q_lane_s16(addr, big, 7);
anatofuz
parents:
diff changeset
47 vld1q_lane_s32(addr, big, 3);
anatofuz
parents:
diff changeset
48 vld1q_lane_s64(addr, big, 1);
anatofuz
parents:
diff changeset
49
anatofuz
parents:
diff changeset
50 vld1_lane_s8(addr, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
51 vld1_lane_s16(addr, small, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
52 vld1_lane_s32(addr, small, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
53 vld1_lane_s64(addr, small, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
54
anatofuz
parents:
diff changeset
55 vld1q_lane_s8(addr, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
56 vld1q_lane_s16(addr, big, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
57 vld1q_lane_s32(addr, big, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
58 vld1q_lane_s64(addr, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 vst1_lane_s8(addr, small, 7);
anatofuz
parents:
diff changeset
61 vst1_lane_s16(addr, small, 3);
anatofuz
parents:
diff changeset
62 vst1_lane_s32(addr, small, 1);
anatofuz
parents:
diff changeset
63 vst1_lane_s64(addr, small, 0);
anatofuz
parents:
diff changeset
64
anatofuz
parents:
diff changeset
65 vst1q_lane_s8(addr, big, 15);
anatofuz
parents:
diff changeset
66 vst1q_lane_s16(addr, big, 7);
anatofuz
parents:
diff changeset
67 vst1q_lane_s32(addr, big, 3);
anatofuz
parents:
diff changeset
68 vst1q_lane_s64(addr, big, 1);
anatofuz
parents:
diff changeset
69
anatofuz
parents:
diff changeset
70 vst1_lane_s8(addr, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
71 vst1_lane_s16(addr, small, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
72 vst1_lane_s32(addr, small, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
73 vst1_lane_s64(addr, small, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
74
anatofuz
parents:
diff changeset
75 vst1q_lane_s8(addr, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
76 vst1q_lane_s16(addr, big, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
77 vst1q_lane_s32(addr, big, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
78 vst1q_lane_s64(addr, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
79 }
anatofuz
parents:
diff changeset
80
anatofuz
parents:
diff changeset
81 void test_ld2st2(int8x8x2_t small8, int8x16x2_t big8,
anatofuz
parents:
diff changeset
82 int16x4x2_t small16, int16x8x2_t big16,
anatofuz
parents:
diff changeset
83 int32x2x2_t small32, int32x4x2_t big32,
anatofuz
parents:
diff changeset
84 int64x1x2_t small64, int64x2x2_t big64,
anatofuz
parents:
diff changeset
85 void *addr) {
anatofuz
parents:
diff changeset
86 vld2_lane_s8(addr, small8, 7);
anatofuz
parents:
diff changeset
87 vld2_lane_s16(addr, small16, 3);
anatofuz
parents:
diff changeset
88 vld2_lane_s32(addr, small32, 1);
anatofuz
parents:
diff changeset
89 vld2_lane_s64(addr, small64, 0);
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 vld2q_lane_s8(addr, big8, 15);
anatofuz
parents:
diff changeset
92 vld2q_lane_s16(addr, big16, 7);
anatofuz
parents:
diff changeset
93 vld2q_lane_s32(addr, big32, 3);
anatofuz
parents:
diff changeset
94 vld2q_lane_s64(addr, big64, 1);
anatofuz
parents:
diff changeset
95
anatofuz
parents:
diff changeset
96 vld2_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
97 vld2_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
98 vld2_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
99 vld2_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 vld2q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
102 vld2q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
103 vld2q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
104 vld2q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
105
anatofuz
parents:
diff changeset
106 vst2_lane_s8(addr, small8, 7);
anatofuz
parents:
diff changeset
107 vst2_lane_s16(addr, small16, 3);
anatofuz
parents:
diff changeset
108 vst2_lane_s32(addr, small32, 1);
anatofuz
parents:
diff changeset
109 vst2_lane_s64(addr, small64, 0);
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 vst2q_lane_s8(addr, big8, 15);
anatofuz
parents:
diff changeset
112 vst2q_lane_s16(addr, big16, 7);
anatofuz
parents:
diff changeset
113 vst2q_lane_s32(addr, big32, 3);
anatofuz
parents:
diff changeset
114 vst2q_lane_s64(addr, big64, 1);
anatofuz
parents:
diff changeset
115
anatofuz
parents:
diff changeset
116 vst2_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
117 vst2_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
118 vst2_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
119 vst2_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
120
anatofuz
parents:
diff changeset
121 vst2q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
122 vst2q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
123 vst2q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
124 vst2q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
125 }
anatofuz
parents:
diff changeset
126
anatofuz
parents:
diff changeset
127 void test_ld3st3(int8x8x3_t small8, int8x16x3_t big8,
anatofuz
parents:
diff changeset
128 int16x4x3_t small16, int16x8x3_t big16,
anatofuz
parents:
diff changeset
129 int32x2x3_t small32, int32x4x3_t big32,
anatofuz
parents:
diff changeset
130 int64x1x3_t small64, int64x2x3_t big64,
anatofuz
parents:
diff changeset
131 void *addr) {
anatofuz
parents:
diff changeset
132 vld3_lane_s8(addr, small8, 7);
anatofuz
parents:
diff changeset
133 vld3_lane_s16(addr, small16, 3);
anatofuz
parents:
diff changeset
134 vld3_lane_s32(addr, small32, 1);
anatofuz
parents:
diff changeset
135 vld3_lane_s64(addr, small64, 0);
anatofuz
parents:
diff changeset
136
anatofuz
parents:
diff changeset
137 vld3q_lane_s8(addr, big8, 15);
anatofuz
parents:
diff changeset
138 vld3q_lane_s16(addr, big16, 7);
anatofuz
parents:
diff changeset
139 vld3q_lane_s32(addr, big32, 3);
anatofuz
parents:
diff changeset
140 vld3q_lane_s64(addr, big64, 1);
anatofuz
parents:
diff changeset
141
anatofuz
parents:
diff changeset
142 vld3_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
143 vld3_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
144 vld3_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
145 vld3_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
146
anatofuz
parents:
diff changeset
147 vld3q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
148 vld3q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
149 vld3q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
150 vld3q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
151
anatofuz
parents:
diff changeset
152 vst3_lane_s8(addr, small8, 7);
anatofuz
parents:
diff changeset
153 vst3_lane_s16(addr, small16, 3);
anatofuz
parents:
diff changeset
154 vst3_lane_s32(addr, small32, 1);
anatofuz
parents:
diff changeset
155 vst3_lane_s64(addr, small64, 0);
anatofuz
parents:
diff changeset
156
anatofuz
parents:
diff changeset
157 vst3q_lane_s8(addr, big8, 15);
anatofuz
parents:
diff changeset
158 vst3q_lane_s16(addr, big16, 7);
anatofuz
parents:
diff changeset
159 vst3q_lane_s32(addr, big32, 3);
anatofuz
parents:
diff changeset
160 vst3q_lane_s64(addr, big64, 1);
anatofuz
parents:
diff changeset
161
anatofuz
parents:
diff changeset
162 vst3_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
163 vst3_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
164 vst3_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
165 vst3_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
166
anatofuz
parents:
diff changeset
167 vst3q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
168 vst3q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
169 vst3q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
170 vst3q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
171 }
anatofuz
parents:
diff changeset
172
anatofuz
parents:
diff changeset
173 void test_ld4st4(int8x8x4_t small8, int8x16x4_t big8,
anatofuz
parents:
diff changeset
174 int16x4x4_t small16, int16x8x4_t big16,
anatofuz
parents:
diff changeset
175 int32x2x4_t small32, int32x4x4_t big32,
anatofuz
parents:
diff changeset
176 int64x1x4_t small64, int64x2x4_t big64,
anatofuz
parents:
diff changeset
177 void *addr) {
anatofuz
parents:
diff changeset
178 vld4_lane_s8(addr, small8, 7);
anatofuz
parents:
diff changeset
179 vld4_lane_s16(addr, small16, 3);
anatofuz
parents:
diff changeset
180 vld4_lane_s32(addr, small32, 1);
anatofuz
parents:
diff changeset
181 vld4_lane_s64(addr, small64, 0);
anatofuz
parents:
diff changeset
182
anatofuz
parents:
diff changeset
183 vld4q_lane_s8(addr, big8, 15);
anatofuz
parents:
diff changeset
184 vld4q_lane_s16(addr, big16, 7);
anatofuz
parents:
diff changeset
185 vld4q_lane_s32(addr, big32, 3);
anatofuz
parents:
diff changeset
186 vld4q_lane_s64(addr, big64, 1);
anatofuz
parents:
diff changeset
187
anatofuz
parents:
diff changeset
188 vld4_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
189 vld4_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
190 vld4_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
191 vld4_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
192
anatofuz
parents:
diff changeset
193 vld4q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
194 vld4q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
195 vld4q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
196 vld4q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
197
anatofuz
parents:
diff changeset
198 vst4_lane_s8(addr, small8, 7);
anatofuz
parents:
diff changeset
199 vst4_lane_s16(addr, small16, 3);
anatofuz
parents:
diff changeset
200 vst4_lane_s32(addr, small32, 1);
anatofuz
parents:
diff changeset
201 vst4_lane_s64(addr, small64, 0);
anatofuz
parents:
diff changeset
202
anatofuz
parents:
diff changeset
203 vst4q_lane_s8(addr, big8, 15);
anatofuz
parents:
diff changeset
204 vst4q_lane_s16(addr, big16, 7);
anatofuz
parents:
diff changeset
205 vst4q_lane_s32(addr, big32, 3);
anatofuz
parents:
diff changeset
206 vst4q_lane_s64(addr, big64, 1);
anatofuz
parents:
diff changeset
207
anatofuz
parents:
diff changeset
208 vst4_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
209 vst4_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
210 vst4_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
211 vst4_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
212
anatofuz
parents:
diff changeset
213 vst4q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
214 vst4q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
215 vst4q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
216 vst4q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
anatofuz
parents:
diff changeset
217 }
anatofuz
parents:
diff changeset
218