[RISCV] Simplify MIPS CCMov patterns. NFC (#125318)
[llvm-project.git] / clang / test / Sema / aarch64-neon-immediate-ranges / extract-elt-from-vector.c
blob5738f5ad27f3e868d11c8bbc87987cd370fb7880
1 // RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon -ffreestanding -fsyntax-only -verify %s
3 #include <arm_neon.h>
4 // REQUIRES: aarch64-registered-target
7 void test_extract_one_element_from_vector_s8(int8x16_t arg_i8x16, int8x8_t arg_i8x8) {
8 vdupb_lane_s8(arg_i8x8, 0);
9 vdupb_lane_s8(arg_i8x8, 7);
10 vdupb_lane_s8(arg_i8x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
11 vdupb_lane_s8(arg_i8x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
13 vdupb_laneq_s8(arg_i8x16, 0);
14 vdupb_laneq_s8(arg_i8x16, 15);
15 vdupb_laneq_s8(arg_i8x16, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
16 vdupb_laneq_s8(arg_i8x16, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
18 vget_lane_s8(arg_i8x8, 0);
19 vget_lane_s8(arg_i8x8, 7);
20 vget_lane_s8(arg_i8x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
21 vget_lane_s8(arg_i8x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
23 vgetq_lane_s8(arg_i8x16, 0);
24 vgetq_lane_s8(arg_i8x16, 15);
25 vgetq_lane_s8(arg_i8x16, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
26 vgetq_lane_s8(arg_i8x16, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
30 void test_extract_one_element_from_vector_s16(int16x4_t arg_i16x4, int16x8_t arg_i16x8) {
31 vduph_lane_s16(arg_i16x4, 0);
32 vduph_lane_s16(arg_i16x4, 3);
33 vduph_lane_s16(arg_i16x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
34 vduph_lane_s16(arg_i16x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
36 vduph_laneq_s16(arg_i16x8, 0);
37 vduph_laneq_s16(arg_i16x8, 7);
38 vduph_laneq_s16(arg_i16x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
39 vduph_laneq_s16(arg_i16x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
41 vget_lane_s16(arg_i16x4, 0);
42 vget_lane_s16(arg_i16x4, 3);
43 vget_lane_s16(arg_i16x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
44 vget_lane_s16(arg_i16x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
46 vgetq_lane_s16(arg_i16x8, 0);
47 vgetq_lane_s16(arg_i16x8, 7);
48 vgetq_lane_s16(arg_i16x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
49 vgetq_lane_s16(arg_i16x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
53 void test_extract_one_element_from_vector_s32(int32x4_t arg_i32x4, int32x2_t arg_i32x2) {
54 vdups_lane_s32(arg_i32x2, 0);
55 vdups_lane_s32(arg_i32x2, 1);
56 vdups_lane_s32(arg_i32x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
57 vdups_lane_s32(arg_i32x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
59 vdups_laneq_s32(arg_i32x4, 0);
60 vdups_laneq_s32(arg_i32x4, 3);
61 vdups_laneq_s32(arg_i32x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
62 vdups_laneq_s32(arg_i32x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
64 vget_lane_s32(arg_i32x2, 0);
65 vget_lane_s32(arg_i32x2, 1);
66 vget_lane_s32(arg_i32x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
67 vget_lane_s32(arg_i32x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
69 vgetq_lane_s32(arg_i32x4, 0);
70 vgetq_lane_s32(arg_i32x4, 3);
71 vgetq_lane_s32(arg_i32x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
72 vgetq_lane_s32(arg_i32x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
76 void test_extract_one_element_from_vector_s64(int64x2_t arg_i64x2, int64x1_t arg_i64x1) {
77 vdupd_lane_s64(arg_i64x1, 0);
78 vdupd_lane_s64(arg_i64x1, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
79 vdupd_lane_s64(arg_i64x1, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
81 vdupd_laneq_s64(arg_i64x2, 0);
82 vdupd_laneq_s64(arg_i64x2, 1);
83 vdupd_laneq_s64(arg_i64x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
84 vdupd_laneq_s64(arg_i64x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
86 vget_lane_s64(arg_i64x1, 0);
87 vget_lane_s64(arg_i64x1, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
88 vget_lane_s64(arg_i64x1, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
90 vgetq_lane_s64(arg_i64x2, 0);
91 vgetq_lane_s64(arg_i64x2, 1);
92 vgetq_lane_s64(arg_i64x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
93 vgetq_lane_s64(arg_i64x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
97 void test_extract_one_element_from_vector_u8(uint8x8_t arg_u8x8, uint8x16_t arg_u8x16) {
98 vdupb_lane_u8(arg_u8x8, 0);
99 vdupb_lane_u8(arg_u8x8, 7);
100 vdupb_lane_u8(arg_u8x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
101 vdupb_lane_u8(arg_u8x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
103 vdupb_laneq_u8(arg_u8x16, 0);
104 vdupb_laneq_u8(arg_u8x16, 15);
105 vdupb_laneq_u8(arg_u8x16, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
106 vdupb_laneq_u8(arg_u8x16, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
108 vget_lane_u8(arg_u8x8, 0);
109 vget_lane_u8(arg_u8x8, 7);
110 vget_lane_u8(arg_u8x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
111 vget_lane_u8(arg_u8x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
113 vgetq_lane_u8(arg_u8x16, 0);
114 vgetq_lane_u8(arg_u8x16, 15);
115 vgetq_lane_u8(arg_u8x16, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
116 vgetq_lane_u8(arg_u8x16, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
120 void test_extract_one_element_from_vector_u16(uint16x8_t arg_u16x8, uint16x4_t arg_u16x4) {
121 vduph_lane_u16(arg_u16x4, 0);
122 vduph_lane_u16(arg_u16x4, 3);
123 vduph_lane_u16(arg_u16x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
124 vduph_lane_u16(arg_u16x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
126 vduph_laneq_u16(arg_u16x8, 0);
127 vduph_laneq_u16(arg_u16x8, 7);
128 vduph_laneq_u16(arg_u16x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
129 vduph_laneq_u16(arg_u16x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
131 vget_lane_u16(arg_u16x4, 0);
132 vget_lane_u16(arg_u16x4, 3);
133 vget_lane_u16(arg_u16x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
134 vget_lane_u16(arg_u16x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
136 vgetq_lane_u16(arg_u16x8, 0);
137 vgetq_lane_u16(arg_u16x8, 7);
138 vgetq_lane_u16(arg_u16x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
139 vgetq_lane_u16(arg_u16x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
143 void test_extract_one_element_from_vector_u32(uint32x2_t arg_u32x2, uint32x4_t arg_u32x4) {
144 vdups_lane_u32(arg_u32x2, 0);
145 vdups_lane_u32(arg_u32x2, 1);
146 vdups_lane_u32(arg_u32x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
147 vdups_lane_u32(arg_u32x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
149 vdups_laneq_u32(arg_u32x4, 0);
150 vdups_laneq_u32(arg_u32x4, 3);
151 vdups_laneq_u32(arg_u32x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
152 vdups_laneq_u32(arg_u32x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
154 vget_lane_u32(arg_u32x2, 0);
155 vget_lane_u32(arg_u32x2, 1);
156 vget_lane_u32(arg_u32x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
157 vget_lane_u32(arg_u32x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
159 vgetq_lane_u32(arg_u32x4, 0);
160 vgetq_lane_u32(arg_u32x4, 3);
161 vgetq_lane_u32(arg_u32x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
162 vgetq_lane_u32(arg_u32x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
166 void test_extract_one_element_from_vector_u64(uint64x1_t arg_u64x1, uint64x2_t arg_u64x2) {
167 vdupd_lane_u64(arg_u64x1, 0);
168 vdupd_lane_u64(arg_u64x1, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
169 vdupd_lane_u64(arg_u64x1, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
171 vdupd_laneq_u64(arg_u64x2, 0);
172 vdupd_laneq_u64(arg_u64x2, 1);
173 vdupd_laneq_u64(arg_u64x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
174 vdupd_laneq_u64(arg_u64x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
176 vget_lane_u64(arg_u64x1, 0);
177 vget_lane_u64(arg_u64x1, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
178 vget_lane_u64(arg_u64x1, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
180 vgetq_lane_u64(arg_u64x2, 0);
181 vgetq_lane_u64(arg_u64x2, 1);
182 vgetq_lane_u64(arg_u64x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
183 vgetq_lane_u64(arg_u64x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
187 void test_extract_one_element_from_vector_f32(float32x4_t arg_f32x4, float32x2_t arg_f32x2) {
188 vdups_lane_f32(arg_f32x2, 0);
189 vdups_lane_f32(arg_f32x2, 1);
190 vdups_lane_f32(arg_f32x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
191 vdups_lane_f32(arg_f32x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
193 vdups_laneq_f32(arg_f32x4, 0);
194 vdups_laneq_f32(arg_f32x4, 3);
195 vdups_laneq_f32(arg_f32x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
196 vdups_laneq_f32(arg_f32x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
198 vget_lane_f32(arg_f32x2, 0);
199 vget_lane_f32(arg_f32x2, 1);
200 vget_lane_f32(arg_f32x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
201 vget_lane_f32(arg_f32x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
203 vgetq_lane_f32(arg_f32x4, 0);
204 vgetq_lane_f32(arg_f32x4, 3);
205 vgetq_lane_f32(arg_f32x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
206 vgetq_lane_f32(arg_f32x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
210 void test_extract_one_element_from_vector_f64(float64x2_t arg_f64x2, float64x1_t arg_f64x1) {
211 vdupd_lane_f64(arg_f64x1, 0);
212 vdupd_lane_f64(arg_f64x1, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
213 vdupd_lane_f64(arg_f64x1, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
215 vdupd_laneq_f64(arg_f64x2, 0);
216 vdupd_laneq_f64(arg_f64x2, 1);
217 vdupd_laneq_f64(arg_f64x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
218 vdupd_laneq_f64(arg_f64x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
220 vget_lane_f64(arg_f64x1, 0);
221 vget_lane_f64(arg_f64x1, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
222 vget_lane_f64(arg_f64x1, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
224 vgetq_lane_f64(arg_f64x2, 0);
225 vgetq_lane_f64(arg_f64x2, 1);
226 vgetq_lane_f64(arg_f64x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
227 vgetq_lane_f64(arg_f64x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
231 void test_extract_one_element_from_vector_p8(poly8x16_t arg_p8x16, poly8x8_t arg_p8x8) {
232 vdupb_lane_p8(arg_p8x8, 0);
233 vdupb_lane_p8(arg_p8x8, 7);
234 vdupb_lane_p8(arg_p8x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
235 vdupb_lane_p8(arg_p8x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
237 vdupb_laneq_p8(arg_p8x16, 0);
238 vdupb_laneq_p8(arg_p8x16, 15);
239 vdupb_laneq_p8(arg_p8x16, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
240 vdupb_laneq_p8(arg_p8x16, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
242 vget_lane_p8(arg_p8x8, 0);
243 vget_lane_p8(arg_p8x8, 7);
244 vget_lane_p8(arg_p8x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
245 vget_lane_p8(arg_p8x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
247 vgetq_lane_p8(arg_p8x16, 0);
248 vgetq_lane_p8(arg_p8x16, 15);
249 vgetq_lane_p8(arg_p8x16, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
250 vgetq_lane_p8(arg_p8x16, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}}
254 void test_extract_one_element_from_vector_p16(poly16x4_t arg_p16x4, poly16x8_t arg_p16x8) {
255 vduph_lane_p16(arg_p16x4, 0);
256 vduph_lane_p16(arg_p16x4, 3);
257 vduph_lane_p16(arg_p16x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
258 vduph_lane_p16(arg_p16x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
260 vduph_laneq_p16(arg_p16x8, 0);
261 vduph_laneq_p16(arg_p16x8, 7);
262 vduph_laneq_p16(arg_p16x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
263 vduph_laneq_p16(arg_p16x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
265 vget_lane_p16(arg_p16x4, 0);
266 vget_lane_p16(arg_p16x4, 3);
267 vget_lane_p16(arg_p16x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
268 vget_lane_p16(arg_p16x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
270 vgetq_lane_p16(arg_p16x8, 0);
271 vgetq_lane_p16(arg_p16x8, 7);
272 vgetq_lane_p16(arg_p16x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
273 vgetq_lane_p16(arg_p16x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}
277 void test_extract_one_element_from_vector_p64(poly64x2_t arg_p64x2, poly64x1_t arg_p64x1) {
278 vget_lane_p64(arg_p64x1, 0);
279 vget_lane_p64(arg_p64x1, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
280 vget_lane_p64(arg_p64x1, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
282 vgetq_lane_p64(arg_p64x2, 0);
283 vgetq_lane_p64(arg_p64x2, 1);
284 vgetq_lane_p64(arg_p64x2, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
285 vgetq_lane_p64(arg_p64x2, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}}
289 void test_extract_one_element_from_vector_f16(float16x8_t arg_f16x8, float16x4_t arg_f16x4) {
290 vget_lane_f16(arg_f16x4, 0);
291 vget_lane_f16(arg_f16x4, 3);
292 vget_lane_f16(arg_f16x4, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
293 vget_lane_f16(arg_f16x4, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}}
295 vgetq_lane_f16(arg_f16x8, 0);
296 vgetq_lane_f16(arg_f16x8, 7);
297 vgetq_lane_f16(arg_f16x8, -1); // expected-error-re {{argument value {{.*}} is outside the valid range}}
298 vgetq_lane_f16(arg_f16x8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}}