1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64_be--linux-gnu < %s | FileCheck %s
4 @vec_v8i16 = dso_local global <8 x i16> <i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>
6 define dso_local void @movi_modimm_t1() nounwind {
7 ; CHECK-LABEL: movi_modimm_t1:
9 ; CHECK-NEXT: movi v0.4s, #1
10 ; CHECK-NEXT: adrp x8, vec_v8i16
11 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
12 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
13 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
14 ; CHECK-NEXT: st1 { v0.8h }, [x8]
16 %in = load <8 x i16>, ptr @vec_v8i16
17 %rv = add <8 x i16> %in, <i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0>
18 store <8 x i16> %rv, ptr @vec_v8i16
22 define dso_local void @movi_modimm_t2() nounwind {
23 ; CHECK-LABEL: movi_modimm_t2:
25 ; CHECK-NEXT: movi v0.4s, #1, lsl #8
26 ; CHECK-NEXT: adrp x8, vec_v8i16
27 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
28 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
29 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
30 ; CHECK-NEXT: st1 { v0.8h }, [x8]
32 %in = load <8 x i16>, ptr @vec_v8i16
33 %rv = add <8 x i16> %in, <i16 256, i16 0, i16 256, i16 0, i16 256, i16 0, i16 256, i16 0>
34 store <8 x i16> %rv, ptr @vec_v8i16
38 define dso_local void @movi_modimm_t3() nounwind {
39 ; CHECK-LABEL: movi_modimm_t3:
41 ; CHECK-NEXT: movi v0.4s, #1, lsl #16
42 ; CHECK-NEXT: adrp x8, vec_v8i16
43 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
44 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
45 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
46 ; CHECK-NEXT: st1 { v0.8h }, [x8]
48 %in = load <8 x i16>, ptr @vec_v8i16
49 %rv = add <8 x i16> %in, <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>
50 store <8 x i16> %rv, ptr @vec_v8i16
54 define dso_local void @movi_modimm_t4() nounwind {
55 ; CHECK-LABEL: movi_modimm_t4:
57 ; CHECK-NEXT: movi v0.4s, #1, lsl #24
58 ; CHECK-NEXT: adrp x8, vec_v8i16
59 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
60 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
61 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
62 ; CHECK-NEXT: st1 { v0.8h }, [x8]
64 %in = load <8 x i16>, ptr @vec_v8i16
65 %rv = add <8 x i16> %in, <i16 0, i16 256, i16 0, i16 256, i16 0, i16 256, i16 0, i16 256>
66 store <8 x i16> %rv, ptr @vec_v8i16
70 define dso_local void @movi_modimm_t5() nounwind {
71 ; CHECK-LABEL: movi_modimm_t5:
73 ; CHECK-NEXT: movi v0.8h, #1
74 ; CHECK-NEXT: adrp x8, vec_v8i16
75 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
76 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
77 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
78 ; CHECK-NEXT: st1 { v0.8h }, [x8]
80 %in = load <8 x i16>, ptr @vec_v8i16
81 %rv = add <8 x i16> %in, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
82 store <8 x i16> %rv, ptr @vec_v8i16
86 define dso_local void @movi_modimm_t6() nounwind {
87 ; CHECK-LABEL: movi_modimm_t6:
89 ; CHECK-NEXT: movi v0.8h, #1, lsl #8
90 ; CHECK-NEXT: adrp x8, vec_v8i16
91 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
92 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
93 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
94 ; CHECK-NEXT: st1 { v0.8h }, [x8]
96 %in = load <8 x i16>, ptr @vec_v8i16
97 %rv = add <8 x i16> %in, <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256>
98 store <8 x i16> %rv, ptr @vec_v8i16
102 define dso_local void @movi_modimm_t7() nounwind {
103 ; CHECK-LABEL: movi_modimm_t7:
105 ; CHECK-NEXT: movi v0.4s, #1, msl #8
106 ; CHECK-NEXT: adrp x8, vec_v8i16
107 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
108 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
109 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
110 ; CHECK-NEXT: st1 { v0.8h }, [x8]
112 %in = load <8 x i16>, ptr @vec_v8i16
113 %rv = add <8 x i16> %in, <i16 511, i16 0, i16 511, i16 0, i16 511, i16 0, i16 511, i16 0>
114 store <8 x i16> %rv, ptr @vec_v8i16
118 define dso_local void @movi_modimm_t8() nounwind {
119 ; CHECK-LABEL: movi_modimm_t8:
121 ; CHECK-NEXT: movi v0.4s, #1, msl #16
122 ; CHECK-NEXT: adrp x8, vec_v8i16
123 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
124 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
125 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
126 ; CHECK-NEXT: st1 { v0.8h }, [x8]
128 %in = load <8 x i16>, ptr @vec_v8i16
129 %rv = add <8 x i16> %in, <i16 65535, i16 1, i16 65535, i16 1, i16 65535, i16 1, i16 65535, i16 1>
130 store <8 x i16> %rv, ptr @vec_v8i16
134 define dso_local void @movi_modimm_t9() nounwind {
135 ; CHECK-LABEL: movi_modimm_t9:
137 ; CHECK-NEXT: movi v0.16b, #1
138 ; CHECK-NEXT: adrp x8, vec_v8i16
139 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
140 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
141 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
142 ; CHECK-NEXT: st1 { v0.8h }, [x8]
144 %in = load <8 x i16>, ptr @vec_v8i16
145 %rv = add <8 x i16> %in, <i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257>
146 store <8 x i16> %rv, ptr @vec_v8i16
150 define dso_local void @movi_modimm_t10() nounwind {
151 ; CHECK-LABEL: movi_modimm_t10:
153 ; CHECK-NEXT: movi v0.2d, #0x00ffff0000ffff
154 ; CHECK-NEXT: adrp x8, vec_v8i16
155 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
156 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
157 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
158 ; CHECK-NEXT: st1 { v0.8h }, [x8]
160 %in = load <8 x i16>, ptr @vec_v8i16
161 %rv = add <8 x i16> %in, <i16 -1, i16 0, i16 -1, i16 0, i16 -1, i16 0, i16 -1, i16 0>
162 store <8 x i16> %rv, ptr @vec_v8i16
166 define dso_local void @fmov_modimm_t11() nounwind {
167 ; CHECK-LABEL: fmov_modimm_t11:
169 ; CHECK-NEXT: fmov v0.4s, #3.00000000
170 ; CHECK-NEXT: adrp x8, vec_v8i16
171 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
172 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
173 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
174 ; CHECK-NEXT: st1 { v0.8h }, [x8]
176 %in = load <8 x i16>, ptr @vec_v8i16
177 %rv = add <8 x i16> %in, <i16 0, i16 16448, i16 0, i16 16448, i16 0, i16 16448, i16 0, i16 16448>
178 store <8 x i16> %rv, ptr @vec_v8i16
182 define dso_local void @fmov_modimm_t12() nounwind {
183 ; CHECK-LABEL: fmov_modimm_t12:
185 ; CHECK-NEXT: fmov v0.2d, #0.17968750
186 ; CHECK-NEXT: adrp x8, vec_v8i16
187 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
188 ; CHECK-NEXT: ld1 { v1.8h }, [x8]
189 ; CHECK-NEXT: add v0.8h, v1.8h, v0.8h
190 ; CHECK-NEXT: st1 { v0.8h }, [x8]
192 %in = load <8 x i16>, ptr @vec_v8i16
193 %rv = add <8 x i16> %in, <i16 0, i16 0, i16 0, i16 16327, i16 0, i16 0, i16 0, i16 16327>
194 store <8 x i16> %rv, ptr @vec_v8i16
198 define dso_local void @mvni_modimm_t1() nounwind {
199 ; CHECK-LABEL: mvni_modimm_t1:
201 ; CHECK-NEXT: adrp x8, vec_v8i16
202 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
203 ; CHECK-NEXT: mvni v1.4s, #1
204 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
205 ; CHECK-NEXT: add v0.8h, v0.8h, v1.8h
206 ; CHECK-NEXT: st1 { v0.8h }, [x8]
208 %in = load <8 x i16>, ptr @vec_v8i16
209 %rv = add <8 x i16> %in, <i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535>
210 store <8 x i16> %rv, ptr @vec_v8i16
214 define dso_local void @mvni_modimm_t2() nounwind {
215 ; CHECK-LABEL: mvni_modimm_t2:
217 ; CHECK-NEXT: adrp x8, vec_v8i16
218 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
219 ; CHECK-NEXT: mvni v1.4s, #1, lsl #8
220 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
221 ; CHECK-NEXT: add v0.8h, v0.8h, v1.8h
222 ; CHECK-NEXT: st1 { v0.8h }, [x8]
224 %in = load <8 x i16>, ptr @vec_v8i16
225 %rv = add <8 x i16> %in, <i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535>
226 store <8 x i16> %rv, ptr @vec_v8i16
230 define dso_local void @mvni_modimm_t3() nounwind {
231 ; CHECK-LABEL: mvni_modimm_t3:
233 ; CHECK-NEXT: adrp x8, vec_v8i16
234 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
235 ; CHECK-NEXT: mvni v1.4s, #1, lsl #16
236 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
237 ; CHECK-NEXT: add v0.8h, v0.8h, v1.8h
238 ; CHECK-NEXT: st1 { v0.8h }, [x8]
240 %in = load <8 x i16>, ptr @vec_v8i16
241 %rv = add <8 x i16> %in, <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534>
242 store <8 x i16> %rv, ptr @vec_v8i16
246 define dso_local void @mvni_modimm_t4() nounwind {
247 ; CHECK-LABEL: mvni_modimm_t4:
249 ; CHECK-NEXT: adrp x8, vec_v8i16
250 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
251 ; CHECK-NEXT: mvni v1.4s, #1, lsl #24
252 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
253 ; CHECK-NEXT: add v0.8h, v0.8h, v1.8h
254 ; CHECK-NEXT: st1 { v0.8h }, [x8]
256 %in = load <8 x i16>, ptr @vec_v8i16
257 %rv = add <8 x i16> %in, <i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279>
258 store <8 x i16> %rv, ptr @vec_v8i16
262 define dso_local void @mvni_modimm_t5() nounwind {
263 ; CHECK-LABEL: mvni_modimm_t5:
265 ; CHECK-NEXT: adrp x8, vec_v8i16
266 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
267 ; CHECK-NEXT: mvni v1.8h, #1
268 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
269 ; CHECK-NEXT: add v0.8h, v0.8h, v1.8h
270 ; CHECK-NEXT: st1 { v0.8h }, [x8]
272 %in = load <8 x i16>, ptr @vec_v8i16
273 %rv = add <8 x i16> %in, <i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534>
274 store <8 x i16> %rv, ptr @vec_v8i16
278 define dso_local void @mvni_modimm_t6() nounwind {
279 ; CHECK-LABEL: mvni_modimm_t6:
281 ; CHECK-NEXT: adrp x8, vec_v8i16
282 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
283 ; CHECK-NEXT: mvni v1.8h, #1, lsl #8
284 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
285 ; CHECK-NEXT: add v0.8h, v0.8h, v1.8h
286 ; CHECK-NEXT: st1 { v0.8h }, [x8]
288 %in = load <8 x i16>, ptr @vec_v8i16
289 %rv = add <8 x i16> %in, <i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279>
290 store <8 x i16> %rv, ptr @vec_v8i16
294 define dso_local void @mvni_modimm_t7() nounwind {
295 ; CHECK-LABEL: mvni_modimm_t7:
297 ; CHECK-NEXT: adrp x8, vec_v8i16
298 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
299 ; CHECK-NEXT: mvni v1.4s, #1, msl #8
300 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
301 ; CHECK-NEXT: add v0.8h, v0.8h, v1.8h
302 ; CHECK-NEXT: st1 { v0.8h }, [x8]
304 %in = load <8 x i16>, ptr @vec_v8i16
305 %rv = add <8 x i16> %in, <i16 65024, i16 65535, i16 65024, i16 65535, i16 65024, i16 65535, i16 65024, i16 65535>
306 store <8 x i16> %rv, ptr @vec_v8i16
310 define dso_local void @mvni_modimm_t8() nounwind {
311 ; CHECK-LABEL: mvni_modimm_t8:
313 ; CHECK-NEXT: adrp x8, vec_v8i16
314 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
315 ; CHECK-NEXT: mvni v1.4s, #1, msl #16
316 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
317 ; CHECK-NEXT: add v0.8h, v0.8h, v1.8h
318 ; CHECK-NEXT: st1 { v0.8h }, [x8]
320 %in = load <8 x i16>, ptr @vec_v8i16
321 %rv = add <8 x i16> %in, <i16 0, i16 65534, i16 0, i16 65534, i16 0, i16 65534, i16 0, i16 65534>
322 store <8 x i16> %rv, ptr @vec_v8i16
326 define dso_local void @bic_modimm_t1() nounwind {
327 ; CHECK-LABEL: bic_modimm_t1:
329 ; CHECK-NEXT: adrp x8, vec_v8i16
330 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
331 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
332 ; CHECK-NEXT: bic v0.4s, #1
333 ; CHECK-NEXT: st1 { v0.8h }, [x8]
335 %in = load <8 x i16>, ptr @vec_v8i16
336 %rv = and <8 x i16> %in, <i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535>
337 store <8 x i16> %rv, ptr @vec_v8i16
341 define dso_local void @bic_modimm_t2() nounwind {
342 ; CHECK-LABEL: bic_modimm_t2:
344 ; CHECK-NEXT: adrp x8, vec_v8i16
345 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
346 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
347 ; CHECK-NEXT: bic v0.4s, #1, lsl #8
348 ; CHECK-NEXT: st1 { v0.8h }, [x8]
350 %in = load <8 x i16>, ptr @vec_v8i16
351 %rv = and <8 x i16> %in, <i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535>
352 store <8 x i16> %rv, ptr @vec_v8i16
356 define dso_local void @bic_modimm_t3() nounwind {
357 ; CHECK-LABEL: bic_modimm_t3:
359 ; CHECK-NEXT: adrp x8, vec_v8i16
360 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
361 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
362 ; CHECK-NEXT: bic v0.4s, #1, lsl #16
363 ; CHECK-NEXT: st1 { v0.8h }, [x8]
365 %in = load <8 x i16>, ptr @vec_v8i16
366 %rv = and <8 x i16> %in, <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534>
367 store <8 x i16> %rv, ptr @vec_v8i16
371 define dso_local void @bic_modimm_t4() nounwind {
372 ; CHECK-LABEL: bic_modimm_t4:
374 ; CHECK-NEXT: adrp x8, vec_v8i16
375 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
376 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
377 ; CHECK-NEXT: bic v0.4s, #1, lsl #24
378 ; CHECK-NEXT: st1 { v0.8h }, [x8]
380 %in = load <8 x i16>, ptr @vec_v8i16
381 %rv = and <8 x i16> %in, <i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279, i16 65535, i16 65279>
382 store <8 x i16> %rv, ptr @vec_v8i16
386 define dso_local void @bic_modimm_t5() nounwind {
387 ; CHECK-LABEL: bic_modimm_t5:
389 ; CHECK-NEXT: adrp x8, vec_v8i16
390 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
391 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
392 ; CHECK-NEXT: bic v0.8h, #1
393 ; CHECK-NEXT: st1 { v0.8h }, [x8]
395 %in = load <8 x i16>, ptr @vec_v8i16
396 %rv = and <8 x i16> %in, <i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534, i16 65534>
397 store <8 x i16> %rv, ptr @vec_v8i16
401 define dso_local void @bic_modimm_t6() nounwind {
402 ; CHECK-LABEL: bic_modimm_t6:
404 ; CHECK-NEXT: adrp x8, vec_v8i16
405 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
406 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
407 ; CHECK-NEXT: bic v0.8h, #1, lsl #8
408 ; CHECK-NEXT: st1 { v0.8h }, [x8]
410 %in = load <8 x i16>, ptr @vec_v8i16
411 %rv = and <8 x i16> %in, <i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279, i16 65279>
412 store <8 x i16> %rv, ptr @vec_v8i16
416 define dso_local void @orr_modimm_t1() nounwind {
417 ; CHECK-LABEL: orr_modimm_t1:
419 ; CHECK-NEXT: adrp x8, vec_v8i16
420 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
421 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
422 ; CHECK-NEXT: orr v0.4s, #1
423 ; CHECK-NEXT: st1 { v0.8h }, [x8]
425 %in = load <8 x i16>, ptr @vec_v8i16
426 %rv = or <8 x i16> %in, <i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0>
427 store <8 x i16> %rv, ptr @vec_v8i16
431 define dso_local void @orr_modimm_t2() nounwind {
432 ; CHECK-LABEL: orr_modimm_t2:
434 ; CHECK-NEXT: adrp x8, vec_v8i16
435 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
436 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
437 ; CHECK-NEXT: orr v0.4s, #1, lsl #8
438 ; CHECK-NEXT: st1 { v0.8h }, [x8]
440 %in = load <8 x i16>, ptr @vec_v8i16
441 %rv = or <8 x i16> %in, <i16 256, i16 0, i16 256, i16 0, i16 256, i16 0, i16 256, i16 0>
442 store <8 x i16> %rv, ptr @vec_v8i16
446 define dso_local void @orr_modimm_t3() nounwind {
447 ; CHECK-LABEL: orr_modimm_t3:
449 ; CHECK-NEXT: adrp x8, vec_v8i16
450 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
451 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
452 ; CHECK-NEXT: orr v0.4s, #1, lsl #16
453 ; CHECK-NEXT: st1 { v0.8h }, [x8]
455 %in = load <8 x i16>, ptr @vec_v8i16
456 %rv = or <8 x i16> %in, <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>
457 store <8 x i16> %rv, ptr @vec_v8i16
461 define dso_local void @orr_modimm_t4() nounwind {
462 ; CHECK-LABEL: orr_modimm_t4:
464 ; CHECK-NEXT: adrp x8, vec_v8i16
465 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
466 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
467 ; CHECK-NEXT: orr v0.4s, #1, lsl #24
468 ; CHECK-NEXT: st1 { v0.8h }, [x8]
470 %in = load <8 x i16>, ptr @vec_v8i16
471 %rv = or <8 x i16> %in, <i16 0, i16 256, i16 0, i16 256, i16 0, i16 256, i16 0, i16 256>
472 store <8 x i16> %rv, ptr @vec_v8i16
476 define dso_local void @orr_modimm_t5() nounwind {
477 ; CHECK-LABEL: orr_modimm_t5:
479 ; CHECK-NEXT: adrp x8, vec_v8i16
480 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
481 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
482 ; CHECK-NEXT: orr v0.8h, #1
483 ; CHECK-NEXT: st1 { v0.8h }, [x8]
485 %in = load <8 x i16>, ptr @vec_v8i16
486 %rv = or <8 x i16> %in, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
487 store <8 x i16> %rv, ptr @vec_v8i16
491 define dso_local void @orr_modimm_t6() nounwind {
492 ; CHECK-LABEL: orr_modimm_t6:
494 ; CHECK-NEXT: adrp x8, vec_v8i16
495 ; CHECK-NEXT: add x8, x8, :lo12:vec_v8i16
496 ; CHECK-NEXT: ld1 { v0.8h }, [x8]
497 ; CHECK-NEXT: orr v0.8h, #1, lsl #8
498 ; CHECK-NEXT: st1 { v0.8h }, [x8]
500 %in = load <8 x i16>, ptr @vec_v8i16
501 %rv = or <8 x i16> %in, <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256>
502 store <8 x i16> %rv, ptr @vec_v8i16
506 declare i8 @f_v8i8(<8 x i8> %arg)
507 declare i16 @f_v4i16(<4 x i16> %arg)
508 declare i32 @f_v2i32(<2 x i32> %arg)
509 declare i64 @f_v1i64(<1 x i64> %arg)
510 declare i8 @f_v16i8(<16 x i8> %arg)
511 declare i16 @f_v8i16(<8 x i16> %arg)
512 declare i32 @f_v4i32(<4 x i32> %arg)
513 declare i64 @f_v2i64(<2 x i64> %arg)
515 define dso_local void @modimm_t1_call() {
516 ; CHECK-LABEL: modimm_t1_call:
518 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
519 ; CHECK-NEXT: .cfi_def_cfa_offset 16
520 ; CHECK-NEXT: .cfi_offset w30, -16
521 ; CHECK-NEXT: movi v0.2s, #8
522 ; CHECK-NEXT: rev64 v0.8b, v0.8b
523 ; CHECK-NEXT: bl f_v8i8
524 ; CHECK-NEXT: movi v0.2s, #7
525 ; CHECK-NEXT: rev64 v0.4h, v0.4h
526 ; CHECK-NEXT: bl f_v4i16
527 ; CHECK-NEXT: movi v0.2s, #6
528 ; CHECK-NEXT: rev64 v0.2s, v0.2s
529 ; CHECK-NEXT: bl f_v2i32
530 ; CHECK-NEXT: movi v0.2s, #5
531 ; CHECK-NEXT: bl f_v1i64
532 ; CHECK-NEXT: movi v0.4s, #5
533 ; CHECK-NEXT: rev64 v0.16b, v0.16b
534 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
535 ; CHECK-NEXT: bl f_v16i8
536 ; CHECK-NEXT: movi v0.4s, #4
537 ; CHECK-NEXT: rev64 v0.8h, v0.8h
538 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
539 ; CHECK-NEXT: bl f_v8i16
540 ; CHECK-NEXT: movi v0.4s, #3
541 ; CHECK-NEXT: rev64 v0.4s, v0.4s
542 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
543 ; CHECK-NEXT: bl f_v4i32
544 ; CHECK-NEXT: movi v0.4s, #2
545 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
546 ; CHECK-NEXT: bl f_v2i64
547 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
549 call i8 @f_v8i8(<8 x i8> <i8 8, i8 0, i8 0, i8 0, i8 8, i8 0, i8 0, i8 0>)
550 call i16 @f_v4i16(<4 x i16> <i16 7, i16 0, i16 7, i16 0>)
551 call i32 @f_v2i32(<2 x i32> <i32 6, i32 6>)
552 call i64 @f_v1i64(<1 x i64> <i64 21474836485>)
553 call i8 @f_v16i8(<16 x i8> <i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0>)
554 call i16 @f_v8i16(<8 x i16> <i16 4, i16 0, i16 4, i16 0, i16 4, i16 0, i16 4, i16 0>)
555 call i32 @f_v4i32(<4 x i32> <i32 3, i32 3, i32 3, i32 3>)
556 call i64 @f_v2i64(<2 x i64> <i64 8589934594, i64 8589934594>)
561 define dso_local void @modimm_t2_call() {
562 ; CHECK-LABEL: modimm_t2_call:
564 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
565 ; CHECK-NEXT: .cfi_def_cfa_offset 16
566 ; CHECK-NEXT: .cfi_offset w30, -16
567 ; CHECK-NEXT: movi v0.2s, #8, lsl #8
568 ; CHECK-NEXT: rev64 v0.8b, v0.8b
569 ; CHECK-NEXT: bl f_v8i8
570 ; CHECK-NEXT: movi v0.2s, #7, lsl #8
571 ; CHECK-NEXT: rev64 v0.4h, v0.4h
572 ; CHECK-NEXT: bl f_v4i16
573 ; CHECK-NEXT: movi v0.2s, #6, lsl #8
574 ; CHECK-NEXT: rev64 v0.2s, v0.2s
575 ; CHECK-NEXT: bl f_v2i32
576 ; CHECK-NEXT: movi v0.2s, #5, lsl #8
577 ; CHECK-NEXT: bl f_v1i64
578 ; CHECK-NEXT: movi v0.4s, #5, lsl #8
579 ; CHECK-NEXT: rev64 v0.16b, v0.16b
580 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
581 ; CHECK-NEXT: bl f_v16i8
582 ; CHECK-NEXT: movi v0.4s, #4, lsl #8
583 ; CHECK-NEXT: rev64 v0.8h, v0.8h
584 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
585 ; CHECK-NEXT: bl f_v8i16
586 ; CHECK-NEXT: movi v0.4s, #3, lsl #8
587 ; CHECK-NEXT: rev64 v0.4s, v0.4s
588 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
589 ; CHECK-NEXT: bl f_v4i32
590 ; CHECK-NEXT: movi v0.4s, #2, lsl #8
591 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
592 ; CHECK-NEXT: bl f_v2i64
593 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
595 call i8 @f_v8i8(<8 x i8> <i8 0, i8 8, i8 0, i8 0, i8 0, i8 8, i8 0, i8 0>)
596 call i16 @f_v4i16(<4 x i16> <i16 1792, i16 0, i16 1792, i16 0>)
597 call i32 @f_v2i32(<2 x i32> <i32 1536, i32 1536>)
598 call i64 @f_v1i64(<1 x i64> <i64 5497558140160>)
599 call i8 @f_v16i8(<16 x i8> <i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0>)
600 call i16 @f_v8i16(<8 x i16> <i16 1024, i16 0, i16 1024, i16 0, i16 1024, i16 0, i16 1024, i16 0>)
601 call i32 @f_v4i32(<4 x i32> <i32 768, i32 768, i32 768, i32 768>)
602 call i64 @f_v2i64(<2 x i64> <i64 2199023256064, i64 2199023256064>)
607 define dso_local void @modimm_t3_call() {
608 ; CHECK-LABEL: modimm_t3_call:
610 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
611 ; CHECK-NEXT: .cfi_def_cfa_offset 16
612 ; CHECK-NEXT: .cfi_offset w30, -16
613 ; CHECK-NEXT: movi v0.2s, #8, lsl #16
614 ; CHECK-NEXT: rev64 v0.8b, v0.8b
615 ; CHECK-NEXT: bl f_v8i8
616 ; CHECK-NEXT: movi v0.2s, #7, lsl #16
617 ; CHECK-NEXT: rev64 v0.4h, v0.4h
618 ; CHECK-NEXT: bl f_v4i16
619 ; CHECK-NEXT: movi v0.2s, #6, lsl #16
620 ; CHECK-NEXT: rev64 v0.2s, v0.2s
621 ; CHECK-NEXT: bl f_v2i32
622 ; CHECK-NEXT: movi v0.2s, #5, lsl #16
623 ; CHECK-NEXT: bl f_v1i64
624 ; CHECK-NEXT: movi v0.4s, #5, lsl #16
625 ; CHECK-NEXT: rev64 v0.16b, v0.16b
626 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
627 ; CHECK-NEXT: bl f_v16i8
628 ; CHECK-NEXT: movi v0.4s, #4, lsl #16
629 ; CHECK-NEXT: rev64 v0.8h, v0.8h
630 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
631 ; CHECK-NEXT: bl f_v8i16
632 ; CHECK-NEXT: movi v0.4s, #3, lsl #16
633 ; CHECK-NEXT: rev64 v0.4s, v0.4s
634 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
635 ; CHECK-NEXT: bl f_v4i32
636 ; CHECK-NEXT: movi v0.4s, #2, lsl #16
637 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
638 ; CHECK-NEXT: bl f_v2i64
639 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
641 call i8 @f_v8i8(<8 x i8> <i8 0, i8 0, i8 8, i8 0, i8 0, i8 0, i8 8, i8 0>)
642 call i16 @f_v4i16(<4 x i16> <i16 0, i16 7, i16 0, i16 7>)
643 call i32 @f_v2i32(<2 x i32> <i32 393216, i32 393216>)
644 call i64 @f_v1i64(<1 x i64> <i64 1407374883880960>)
645 call i8 @f_v16i8(<16 x i8> <i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0>)
646 call i16 @f_v8i16(<8 x i16> <i16 0, i16 4, i16 0, i16 4, i16 0, i16 4, i16 0, i16 4>)
647 call i32 @f_v4i32(<4 x i32> <i32 196608, i32 196608, i32 196608, i32 196608>)
648 call i64 @f_v2i64(<2 x i64> <i64 562949953552384, i64 562949953552384>)
653 define dso_local void @modimm_t4_call() {
654 ; CHECK-LABEL: modimm_t4_call:
656 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
657 ; CHECK-NEXT: .cfi_def_cfa_offset 16
658 ; CHECK-NEXT: .cfi_offset w30, -16
659 ; CHECK-NEXT: movi v0.2s, #8, lsl #24
660 ; CHECK-NEXT: rev64 v0.8b, v0.8b
661 ; CHECK-NEXT: bl f_v8i8
662 ; CHECK-NEXT: movi v0.2s, #7, lsl #24
663 ; CHECK-NEXT: rev64 v0.4h, v0.4h
664 ; CHECK-NEXT: bl f_v4i16
665 ; CHECK-NEXT: movi v0.2s, #6, lsl #24
666 ; CHECK-NEXT: rev64 v0.2s, v0.2s
667 ; CHECK-NEXT: bl f_v2i32
668 ; CHECK-NEXT: movi v0.2s, #5, lsl #24
669 ; CHECK-NEXT: bl f_v1i64
670 ; CHECK-NEXT: movi v0.4s, #5, lsl #24
671 ; CHECK-NEXT: rev64 v0.16b, v0.16b
672 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
673 ; CHECK-NEXT: bl f_v16i8
674 ; CHECK-NEXT: movi v0.4s, #4, lsl #24
675 ; CHECK-NEXT: rev64 v0.8h, v0.8h
676 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
677 ; CHECK-NEXT: bl f_v8i16
678 ; CHECK-NEXT: movi v0.4s, #3, lsl #24
679 ; CHECK-NEXT: rev64 v0.4s, v0.4s
680 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
681 ; CHECK-NEXT: bl f_v4i32
682 ; CHECK-NEXT: movi v0.4s, #2, lsl #24
683 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
684 ; CHECK-NEXT: bl f_v2i64
685 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
687 call i8 @f_v8i8(<8 x i8> <i8 0, i8 0, i8 0, i8 8, i8 0, i8 0, i8 0, i8 8>)
688 call i16 @f_v4i16(<4 x i16> <i16 0, i16 1792, i16 0, i16 1792>)
689 call i32 @f_v2i32(<2 x i32> <i32 100663296, i32 100663296>)
690 call i64 @f_v1i64(<1 x i64> <i64 360287970273525760>)
691 call i8 @f_v16i8(<16 x i8> <i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5, i8 0, i8 0, i8 0, i8 5>)
692 call i16 @f_v8i16(<8 x i16> <i16 0, i16 1024, i16 0, i16 1024, i16 0, i16 1024, i16 0, i16 1024>)
693 call i32 @f_v4i32(<4 x i32> <i32 50331648, i32 50331648, i32 50331648, i32 50331648>)
694 call i64 @f_v2i64(<2 x i64> <i64 144115188109410304, i64 144115188109410304>)
699 define dso_local void @modimm_t5_call() {
700 ; CHECK-LABEL: modimm_t5_call:
702 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
703 ; CHECK-NEXT: .cfi_def_cfa_offset 16
704 ; CHECK-NEXT: .cfi_offset w30, -16
705 ; CHECK-NEXT: movi v0.4h, #8
706 ; CHECK-NEXT: rev64 v0.8b, v0.8b
707 ; CHECK-NEXT: bl f_v8i8
708 ; CHECK-NEXT: movi v0.4h, #7
709 ; CHECK-NEXT: rev64 v0.4h, v0.4h
710 ; CHECK-NEXT: bl f_v4i16
711 ; CHECK-NEXT: movi v0.4h, #6
712 ; CHECK-NEXT: rev64 v0.2s, v0.2s
713 ; CHECK-NEXT: bl f_v2i32
714 ; CHECK-NEXT: movi v0.4h, #5
715 ; CHECK-NEXT: bl f_v1i64
716 ; CHECK-NEXT: movi v0.8h, #5
717 ; CHECK-NEXT: rev64 v0.16b, v0.16b
718 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
719 ; CHECK-NEXT: bl f_v16i8
720 ; CHECK-NEXT: movi v0.8h, #4
721 ; CHECK-NEXT: rev64 v0.8h, v0.8h
722 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
723 ; CHECK-NEXT: bl f_v8i16
724 ; CHECK-NEXT: movi v0.8h, #3
725 ; CHECK-NEXT: rev64 v0.4s, v0.4s
726 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
727 ; CHECK-NEXT: bl f_v4i32
728 ; CHECK-NEXT: movi v0.8h, #2
729 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
730 ; CHECK-NEXT: bl f_v2i64
731 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
733 call i8 @f_v8i8(<8 x i8> <i8 8, i8 0, i8 8, i8 0, i8 8, i8 0, i8 8, i8 0>)
734 call i16 @f_v4i16(<4 x i16> <i16 7, i16 7, i16 7, i16 7>)
735 call i32 @f_v2i32(<2 x i32> <i32 393222, i32 393222>)
736 call i64 @f_v1i64(<1 x i64> <i64 1407396358717445>)
737 call i8 @f_v16i8(<16 x i8> <i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0>)
738 call i16 @f_v8i16(<8 x i16> <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>)
739 call i32 @f_v4i32(<4 x i32> <i32 196611, i32 196611, i32 196611, i32 196611>)
740 call i64 @f_v2i64(<2 x i64> <i64 562958543486978, i64 562958543486978>)
745 define dso_local void @modimm_t6_call() {
746 ; CHECK-LABEL: modimm_t6_call:
748 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
749 ; CHECK-NEXT: .cfi_def_cfa_offset 16
750 ; CHECK-NEXT: .cfi_offset w30, -16
751 ; CHECK-NEXT: movi v0.4h, #8, lsl #8
752 ; CHECK-NEXT: rev64 v0.8b, v0.8b
753 ; CHECK-NEXT: bl f_v8i8
754 ; CHECK-NEXT: movi v0.4h, #7, lsl #8
755 ; CHECK-NEXT: rev64 v0.4h, v0.4h
756 ; CHECK-NEXT: bl f_v4i16
757 ; CHECK-NEXT: movi v0.4h, #6, lsl #8
758 ; CHECK-NEXT: rev64 v0.2s, v0.2s
759 ; CHECK-NEXT: bl f_v2i32
760 ; CHECK-NEXT: movi v0.4h, #5, lsl #8
761 ; CHECK-NEXT: bl f_v1i64
762 ; CHECK-NEXT: movi v0.8h, #5, lsl #8
763 ; CHECK-NEXT: rev64 v0.16b, v0.16b
764 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
765 ; CHECK-NEXT: bl f_v16i8
766 ; CHECK-NEXT: movi v0.8h, #4, lsl #8
767 ; CHECK-NEXT: rev64 v0.8h, v0.8h
768 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
769 ; CHECK-NEXT: bl f_v8i16
770 ; CHECK-NEXT: movi v0.8h, #3, lsl #8
771 ; CHECK-NEXT: rev64 v0.4s, v0.4s
772 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
773 ; CHECK-NEXT: bl f_v4i32
774 ; CHECK-NEXT: movi v0.8h, #2, lsl #8
775 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
776 ; CHECK-NEXT: bl f_v2i64
777 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
779 call i8 @f_v8i8(<8 x i8> <i8 0, i8 8, i8 0, i8 8, i8 0, i8 8, i8 0, i8 8>)
780 call i16 @f_v4i16(<4 x i16> <i16 1792, i16 1792, i16 1792, i16 1792>)
781 call i32 @f_v2i32(<2 x i32> <i32 100664832, i32 100664832>)
782 call i64 @f_v1i64(<1 x i64> <i64 360293467831665920>)
783 call i8 @f_v16i8(<16 x i8> <i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5, i8 0, i8 5>)
784 call i16 @f_v8i16(<8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>)
785 call i32 @f_v4i32(<4 x i32> <i32 50332416, i32 50332416, i32 50332416, i32 50332416>)
786 call i64 @f_v2i64(<2 x i64> <i64 144117387132666368, i64 144117387132666368>)
791 define dso_local void @modimm_t7_call() {
792 ; CHECK-LABEL: modimm_t7_call:
794 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
795 ; CHECK-NEXT: .cfi_def_cfa_offset 16
796 ; CHECK-NEXT: .cfi_offset w30, -16
797 ; CHECK-NEXT: movi v0.2s, #8, msl #8
798 ; CHECK-NEXT: rev64 v0.8b, v0.8b
799 ; CHECK-NEXT: bl f_v8i8
800 ; CHECK-NEXT: movi v0.2s, #7, msl #8
801 ; CHECK-NEXT: rev64 v0.4h, v0.4h
802 ; CHECK-NEXT: bl f_v4i16
803 ; CHECK-NEXT: movi v0.2s, #6, msl #8
804 ; CHECK-NEXT: rev64 v0.2s, v0.2s
805 ; CHECK-NEXT: bl f_v2i32
806 ; CHECK-NEXT: movi v0.2s, #5, msl #8
807 ; CHECK-NEXT: bl f_v1i64
808 ; CHECK-NEXT: movi v0.4s, #5, msl #8
809 ; CHECK-NEXT: rev64 v0.16b, v0.16b
810 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
811 ; CHECK-NEXT: bl f_v16i8
812 ; CHECK-NEXT: movi v0.4s, #4, msl #8
813 ; CHECK-NEXT: rev64 v0.8h, v0.8h
814 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
815 ; CHECK-NEXT: bl f_v8i16
816 ; CHECK-NEXT: movi v0.4s, #3, msl #8
817 ; CHECK-NEXT: rev64 v0.4s, v0.4s
818 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
819 ; CHECK-NEXT: bl f_v4i32
820 ; CHECK-NEXT: movi v0.4s, #2, msl #8
821 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
822 ; CHECK-NEXT: bl f_v2i64
823 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
825 call i8 @f_v8i8(<8 x i8> <i8 255, i8 8, i8 0, i8 0, i8 255, i8 8, i8 0, i8 0>)
826 call i16 @f_v4i16(<4 x i16> <i16 2047, i16 0, i16 2047, i16 0>)
827 call i32 @f_v2i32(<2 x i32> <i32 1791, i32 1791>)
828 call i64 @f_v1i64(<1 x i64> <i64 6592774800895>)
829 call i8 @f_v16i8(<16 x i8> <i8 255, i8 5, i8 0, i8 0, i8 255, i8 5, i8 0, i8 0, i8 255, i8 5, i8 0, i8 0, i8 255, i8 5, i8 0, i8 0>)
830 call i16 @f_v8i16(<8 x i16> <i16 1279, i16 0, i16 1279, i16 0, i16 1279, i16 0, i16 1279, i16 0>)
831 call i32 @f_v4i32(<4 x i32> <i32 1023, i32 1023, i32 1023, i32 1023>)
832 call i64 @f_v2i64(<2 x i64> <i64 3294239916799, i64 3294239916799>)
837 define dso_local void @modimm_t8_call() {
838 ; CHECK-LABEL: modimm_t8_call:
840 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
841 ; CHECK-NEXT: .cfi_def_cfa_offset 16
842 ; CHECK-NEXT: .cfi_offset w30, -16
843 ; CHECK-NEXT: movi v0.2s, #8, msl #16
844 ; CHECK-NEXT: rev64 v0.8b, v0.8b
845 ; CHECK-NEXT: bl f_v8i8
846 ; CHECK-NEXT: movi v0.2s, #7, msl #16
847 ; CHECK-NEXT: rev64 v0.4h, v0.4h
848 ; CHECK-NEXT: bl f_v4i16
849 ; CHECK-NEXT: movi v0.2s, #6, msl #16
850 ; CHECK-NEXT: rev64 v0.2s, v0.2s
851 ; CHECK-NEXT: bl f_v2i32
852 ; CHECK-NEXT: movi v0.2s, #5, msl #16
853 ; CHECK-NEXT: bl f_v1i64
854 ; CHECK-NEXT: movi v0.4s, #5, msl #16
855 ; CHECK-NEXT: rev64 v0.16b, v0.16b
856 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
857 ; CHECK-NEXT: bl f_v16i8
858 ; CHECK-NEXT: movi v0.4s, #4, msl #16
859 ; CHECK-NEXT: rev64 v0.8h, v0.8h
860 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
861 ; CHECK-NEXT: bl f_v8i16
862 ; CHECK-NEXT: movi v0.4s, #3, msl #16
863 ; CHECK-NEXT: rev64 v0.4s, v0.4s
864 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
865 ; CHECK-NEXT: bl f_v4i32
866 ; CHECK-NEXT: movi v0.4s, #2, msl #16
867 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
868 ; CHECK-NEXT: bl f_v2i64
869 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
871 call i8 @f_v8i8(<8 x i8> <i8 255, i8 255, i8 8, i8 0, i8 255, i8 255, i8 8, i8 0>)
872 call i16 @f_v4i16(<4 x i16> <i16 65535, i16 7, i16 65535, i16 7>)
873 call i32 @f_v2i32(<2 x i32> <i32 458751, i32 458751>)
874 call i64 @f_v1i64(<1 x i64> <i64 1688845565689855>)
875 call i8 @f_v16i8(<16 x i8> <i8 255, i8 255, i8 5, i8 0, i8 255, i8 255, i8 5, i8 0, i8 255, i8 255, i8 5, i8 0, i8 255, i8 255, i8 5, i8 0>)
876 call i16 @f_v8i16(<8 x i16> <i16 65535, i16 4, i16 65535, i16 4, i16 65535, i16 4, i16 65535, i16 4>)
877 call i32 @f_v4i32(<4 x i32> <i32 262143, i32 262143, i32 262143, i32 262143>)
878 call i64 @f_v2i64(<2 x i64> <i64 844420635361279, i64 844420635361279>)
883 define dso_local void @modimm_t9_call() {
884 ; CHECK-LABEL: modimm_t9_call:
886 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
887 ; CHECK-NEXT: .cfi_def_cfa_offset 16
888 ; CHECK-NEXT: .cfi_offset w30, -16
889 ; CHECK-NEXT: movi v0.8b, #8
890 ; CHECK-NEXT: rev64 v0.8b, v0.8b
891 ; CHECK-NEXT: bl f_v8i8
892 ; CHECK-NEXT: movi v0.8b, #7
893 ; CHECK-NEXT: rev64 v0.4h, v0.4h
894 ; CHECK-NEXT: bl f_v4i16
895 ; CHECK-NEXT: movi v0.8b, #6
896 ; CHECK-NEXT: rev64 v0.2s, v0.2s
897 ; CHECK-NEXT: bl f_v2i32
898 ; CHECK-NEXT: movi v0.16b, #5
899 ; CHECK-NEXT: rev64 v0.16b, v0.16b
900 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
901 ; CHECK-NEXT: bl f_v16i8
902 ; CHECK-NEXT: movi v0.16b, #4
903 ; CHECK-NEXT: rev64 v0.8h, v0.8h
904 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
905 ; CHECK-NEXT: bl f_v8i16
906 ; CHECK-NEXT: movi v0.16b, #3
907 ; CHECK-NEXT: rev64 v0.4s, v0.4s
908 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
909 ; CHECK-NEXT: bl f_v4i32
910 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
912 call i8 @f_v8i8(<8 x i8> <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>)
913 call i16 @f_v4i16(<4 x i16> <i16 1799, i16 1799, i16 1799, i16 1799>)
914 call i32 @f_v2i32(<2 x i32> <i32 101058054, i32 101058054>)
915 call i8 @f_v16i8(<16 x i8> <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>)
916 call i16 @f_v8i16(<8 x i16> <i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028>)
917 call i32 @f_v4i32(<4 x i32> <i32 50529027, i32 50529027, i32 50529027, i32 50529027>)
922 define dso_local void @modimm_t10_call() {
923 ; CHECK-LABEL: modimm_t10_call:
925 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
926 ; CHECK-NEXT: .cfi_def_cfa_offset 16
927 ; CHECK-NEXT: .cfi_offset w30, -16
928 ; CHECK-NEXT: movi d0, #0x0000ff000000ff
929 ; CHECK-NEXT: rev64 v0.8b, v0.8b
930 ; CHECK-NEXT: bl f_v8i8
931 ; CHECK-NEXT: movi d0, #0x00ffff0000ffff
932 ; CHECK-NEXT: rev64 v0.4h, v0.4h
933 ; CHECK-NEXT: bl f_v4i16
934 ; CHECK-NEXT: movi v0.2d, #0xffffffffffffffff
935 ; CHECK-NEXT: rev64 v0.2s, v0.2s
936 ; CHECK-NEXT: bl f_v2i32
937 ; CHECK-NEXT: movi v0.2d, #0xffffff00ffffff
938 ; CHECK-NEXT: rev64 v0.16b, v0.16b
939 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
940 ; CHECK-NEXT: bl f_v16i8
941 ; CHECK-NEXT: movi v0.2d, #0xffffffffffff0000
942 ; CHECK-NEXT: rev64 v0.8h, v0.8h
943 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
944 ; CHECK-NEXT: bl f_v8i16
945 ; CHECK-NEXT: movi v0.2d, #0xffffffff00000000
946 ; CHECK-NEXT: rev64 v0.4s, v0.4s
947 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
948 ; CHECK-NEXT: bl f_v4i32
949 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
951 call i8 @f_v8i8(<8 x i8> <i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0, i8 0, i8 0>)
952 call i16 @f_v4i16(<4 x i16> <i16 -1, i16 0, i16 -1, i16 0>)
953 call i32 @f_v2i32(<2 x i32> <i32 -1, i32 -1>)
954 call i8 @f_v16i8(<16 x i8> <i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0>)
955 call i16 @f_v8i16(<8 x i16> <i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1, i16 -1>)
956 call i32 @f_v4i32(<4 x i32> <i32 0, i32 -1, i32 0, i32 -1>)
961 define dso_local void @modimm_t11_call() {
962 ; CHECK-LABEL: modimm_t11_call:
964 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
965 ; CHECK-NEXT: .cfi_def_cfa_offset 16
966 ; CHECK-NEXT: .cfi_offset w30, -16
967 ; CHECK-NEXT: fmov v0.2s, #4.00000000
968 ; CHECK-NEXT: rev64 v0.8b, v0.8b
969 ; CHECK-NEXT: bl f_v8i8
970 ; CHECK-NEXT: fmov v0.2s, #3.75000000
971 ; CHECK-NEXT: rev64 v0.4h, v0.4h
972 ; CHECK-NEXT: bl f_v4i16
973 ; CHECK-NEXT: fmov v0.2s, #3.50000000
974 ; CHECK-NEXT: rev64 v0.2s, v0.2s
975 ; CHECK-NEXT: bl f_v2i32
976 ; CHECK-NEXT: fmov v0.2s, #0.39062500
977 ; CHECK-NEXT: bl f_v1i64
978 ; CHECK-NEXT: fmov v0.4s, #3.25000000
979 ; CHECK-NEXT: rev64 v0.16b, v0.16b
980 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
981 ; CHECK-NEXT: bl f_v16i8
982 ; CHECK-NEXT: fmov v0.4s, #3.00000000
983 ; CHECK-NEXT: rev64 v0.8h, v0.8h
984 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
985 ; CHECK-NEXT: bl f_v8i16
986 ; CHECK-NEXT: fmov v0.4s, #2.75000000
987 ; CHECK-NEXT: rev64 v0.4s, v0.4s
988 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
989 ; CHECK-NEXT: bl f_v4i32
990 ; CHECK-NEXT: fmov v0.4s, #2.50000000
991 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
992 ; CHECK-NEXT: bl f_v2i64
993 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
995 call i8 @f_v8i8(<8 x i8> <i8 0, i8 0, i8 128, i8 64, i8 0, i8 0, i8 128, i8 64>)
996 call i16 @f_v4i16(<4 x i16> <i16 0, i16 16496, i16 0, i16 16496>)
997 call i32 @f_v2i32(<2 x i32> <i32 1080033280, i32 1080033280>)
998 call i64 @f_v1i64(<1 x i64> <i64 4523865826746957824>)
999 call i8 @f_v16i8(<16 x i8> <i8 0, i8 0, i8 80, i8 64, i8 0, i8 0, i8 80, i8 64, i8 0, i8 0, i8 80, i8 64, i8 0, i8 0, i8 80, i8 64>)
1000 call i16 @f_v8i16(<8 x i16> <i16 0, i16 16448, i16 0, i16 16448, i16 0, i16 16448, i16 0, i16 16448>)
1001 call i32 @f_v4i32(<4 x i32> <i32 1076887552, i32 1076887552, i32 1076887552, i32 1076887552>)
1002 call i64 @f_v2i64(<2 x i64> <i64 4620693218757967872, i64 4620693218757967872>)
1007 define dso_local void @modimm_t12_call() {
1008 ; CHECK-LABEL: modimm_t12_call:
1010 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1011 ; CHECK-NEXT: .cfi_def_cfa_offset 16
1012 ; CHECK-NEXT: .cfi_offset w30, -16
1013 ; CHECK-NEXT: fmov v0.2d, #0.18750000
1014 ; CHECK-NEXT: rev64 v0.16b, v0.16b
1015 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
1016 ; CHECK-NEXT: bl f_v16i8
1017 ; CHECK-NEXT: fmov v0.2d, #0.17968750
1018 ; CHECK-NEXT: rev64 v0.8h, v0.8h
1019 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
1020 ; CHECK-NEXT: bl f_v8i16
1021 ; CHECK-NEXT: fmov v0.2d, #0.17187500
1022 ; CHECK-NEXT: rev64 v0.4s, v0.4s
1023 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
1024 ; CHECK-NEXT: bl f_v4i32
1025 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1027 call i8 @f_v16i8(<16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 200, i8 63, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 200, i8 63>)
1028 call i16 @f_v8i16(<8 x i16> <i16 0, i16 0, i16 0, i16 16327, i16 0, i16 0, i16 0, i16 16327>)
1029 call i32 @f_v4i32(<4 x i32> <i32 0, i32 1069940736, i32 0, i32 1069940736>)
1034 define <2 x double> @test_v1f64(<1 x double> %0, ptr %1) {
1035 ; CHECK-LABEL: test_v1f64:
1037 ; CHECK-NEXT: mvni v1.2s, #31, msl #16
1038 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
1039 ; CHECK-NEXT: mov v1.d[1], v0.d[0]
1040 ; CHECK-NEXT: ext v0.16b, v1.16b, v1.16b, #8
1042 %vec = shufflevector <1 x double> <double 0xFFE00000FFE00000>, <1 x double> %0, <2 x i32> <i32 0, i32 1>
1043 ret <2 x double> %vec