[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / aarch64-be-bv.ll
blob4afe36268644010e240eef3c062a56191a7d0d8d
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:
8 ; CHECK:       // %bb.0:
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]
15 ; CHECK-NEXT:    ret
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
19   ret void
22 define dso_local void @movi_modimm_t2() nounwind {
23 ; CHECK-LABEL: movi_modimm_t2:
24 ; CHECK:       // %bb.0:
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]
31 ; CHECK-NEXT:    ret
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
35   ret void
38 define dso_local void @movi_modimm_t3() nounwind {
39 ; CHECK-LABEL: movi_modimm_t3:
40 ; CHECK:       // %bb.0:
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]
47 ; CHECK-NEXT:    ret
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
51   ret void
54 define dso_local void @movi_modimm_t4() nounwind {
55 ; CHECK-LABEL: movi_modimm_t4:
56 ; CHECK:       // %bb.0:
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]
63 ; CHECK-NEXT:    ret
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
67   ret void
70 define dso_local void @movi_modimm_t5() nounwind {
71 ; CHECK-LABEL: movi_modimm_t5:
72 ; CHECK:       // %bb.0:
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]
79 ; CHECK-NEXT:    ret
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
83   ret void
86 define dso_local void @movi_modimm_t6() nounwind {
87 ; CHECK-LABEL: movi_modimm_t6:
88 ; CHECK:       // %bb.0:
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]
95 ; CHECK-NEXT:    ret
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
99   ret void
102 define dso_local void @movi_modimm_t7() nounwind {
103 ; CHECK-LABEL: movi_modimm_t7:
104 ; CHECK:       // %bb.0:
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]
111 ; CHECK-NEXT:    ret
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
115   ret void
118 define dso_local void @movi_modimm_t8() nounwind {
119 ; CHECK-LABEL: movi_modimm_t8:
120 ; CHECK:       // %bb.0:
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]
127 ; CHECK-NEXT:    ret
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
131   ret void
134 define dso_local void @movi_modimm_t9() nounwind {
135 ; CHECK-LABEL: movi_modimm_t9:
136 ; CHECK:       // %bb.0:
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]
143 ; CHECK-NEXT:    ret
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
147   ret void
150 define dso_local void @movi_modimm_t10() nounwind {
151 ; CHECK-LABEL: movi_modimm_t10:
152 ; CHECK:       // %bb.0:
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]
159 ; CHECK-NEXT:    ret
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
163   ret void
166 define dso_local void @fmov_modimm_t11() nounwind {
167 ; CHECK-LABEL: fmov_modimm_t11:
168 ; CHECK:       // %bb.0:
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]
175 ; CHECK-NEXT:    ret
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
179   ret void
182 define dso_local void @fmov_modimm_t12() nounwind {
183 ; CHECK-LABEL: fmov_modimm_t12:
184 ; CHECK:       // %bb.0:
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]
191 ; CHECK-NEXT:    ret
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
195   ret void
198 define dso_local void @mvni_modimm_t1() nounwind {
199 ; CHECK-LABEL: mvni_modimm_t1:
200 ; CHECK:       // %bb.0:
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]
207 ; CHECK-NEXT:    ret
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
211   ret void
214 define dso_local void @mvni_modimm_t2() nounwind {
215 ; CHECK-LABEL: mvni_modimm_t2:
216 ; CHECK:       // %bb.0:
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]
223 ; CHECK-NEXT:    ret
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
227   ret void
230 define dso_local void @mvni_modimm_t3() nounwind {
231 ; CHECK-LABEL: mvni_modimm_t3:
232 ; CHECK:       // %bb.0:
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]
239 ; CHECK-NEXT:    ret
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
243   ret void
246 define dso_local void @mvni_modimm_t4() nounwind {
247 ; CHECK-LABEL: mvni_modimm_t4:
248 ; CHECK:       // %bb.0:
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]
255 ; CHECK-NEXT:    ret
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
259   ret void
262 define dso_local void @mvni_modimm_t5() nounwind {
263 ; CHECK-LABEL: mvni_modimm_t5:
264 ; CHECK:       // %bb.0:
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]
271 ; CHECK-NEXT:    ret
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
275   ret void
278 define dso_local void @mvni_modimm_t6() nounwind {
279 ; CHECK-LABEL: mvni_modimm_t6:
280 ; CHECK:       // %bb.0:
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]
287 ; CHECK-NEXT:    ret
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
291   ret void
294 define dso_local void @mvni_modimm_t7() nounwind {
295 ; CHECK-LABEL: mvni_modimm_t7:
296 ; CHECK:       // %bb.0:
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]
303 ; CHECK-NEXT:    ret
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
307   ret void
310 define dso_local void @mvni_modimm_t8() nounwind {
311 ; CHECK-LABEL: mvni_modimm_t8:
312 ; CHECK:       // %bb.0:
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]
319 ; CHECK-NEXT:    ret
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
323   ret void
326 define dso_local void @bic_modimm_t1() nounwind {
327 ; CHECK-LABEL: bic_modimm_t1:
328 ; CHECK:       // %bb.0:
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]
334 ; CHECK-NEXT:    ret
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
338   ret void
341 define dso_local void @bic_modimm_t2() nounwind {
342 ; CHECK-LABEL: bic_modimm_t2:
343 ; CHECK:       // %bb.0:
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]
349 ; CHECK-NEXT:    ret
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
353   ret void
356 define dso_local void @bic_modimm_t3() nounwind {
357 ; CHECK-LABEL: bic_modimm_t3:
358 ; CHECK:       // %bb.0:
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]
364 ; CHECK-NEXT:    ret
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
368   ret void
371 define dso_local void @bic_modimm_t4() nounwind {
372 ; CHECK-LABEL: bic_modimm_t4:
373 ; CHECK:       // %bb.0:
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]
379 ; CHECK-NEXT:    ret
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
383   ret void
386 define dso_local void @bic_modimm_t5() nounwind {
387 ; CHECK-LABEL: bic_modimm_t5:
388 ; CHECK:       // %bb.0:
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]
394 ; CHECK-NEXT:    ret
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
398   ret void
401 define dso_local void @bic_modimm_t6() nounwind {
402 ; CHECK-LABEL: bic_modimm_t6:
403 ; CHECK:       // %bb.0:
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]
409 ; CHECK-NEXT:    ret
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
413   ret void
416 define dso_local void @orr_modimm_t1() nounwind {
417 ; CHECK-LABEL: orr_modimm_t1:
418 ; CHECK:       // %bb.0:
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]
424 ; CHECK-NEXT:    ret
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
428   ret void
431 define dso_local void @orr_modimm_t2() nounwind {
432 ; CHECK-LABEL: orr_modimm_t2:
433 ; CHECK:       // %bb.0:
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]
439 ; CHECK-NEXT:    ret
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
443   ret void
446 define dso_local void @orr_modimm_t3() nounwind {
447 ; CHECK-LABEL: orr_modimm_t3:
448 ; CHECK:       // %bb.0:
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]
454 ; CHECK-NEXT:    ret
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
458   ret void
461 define dso_local void @orr_modimm_t4() nounwind {
462 ; CHECK-LABEL: orr_modimm_t4:
463 ; CHECK:       // %bb.0:
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]
469 ; CHECK-NEXT:    ret
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
473   ret void
476 define dso_local void @orr_modimm_t5() nounwind {
477 ; CHECK-LABEL: orr_modimm_t5:
478 ; CHECK:       // %bb.0:
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]
484 ; CHECK-NEXT:    ret
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
488   ret void
491 define dso_local void @orr_modimm_t6() nounwind {
492 ; CHECK-LABEL: orr_modimm_t6:
493 ; CHECK:       // %bb.0:
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]
499 ; CHECK-NEXT:    ret
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
503   ret void
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:
517 ; CHECK:       // %bb.0:
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
548 ; CHECK-NEXT:    ret
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>)
558   ret void
561 define dso_local void @modimm_t2_call() {
562 ; CHECK-LABEL: modimm_t2_call:
563 ; CHECK:       // %bb.0:
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
594 ; CHECK-NEXT:    ret
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>)
604   ret void
607 define dso_local void @modimm_t3_call() {
608 ; CHECK-LABEL: modimm_t3_call:
609 ; CHECK:       // %bb.0:
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
640 ; CHECK-NEXT:    ret
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>)
650   ret void
653 define dso_local void @modimm_t4_call() {
654 ; CHECK-LABEL: modimm_t4_call:
655 ; CHECK:       // %bb.0:
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
686 ; CHECK-NEXT:    ret
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>)
696   ret void
699 define dso_local void @modimm_t5_call() {
700 ; CHECK-LABEL: modimm_t5_call:
701 ; CHECK:       // %bb.0:
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
732 ; CHECK-NEXT:    ret
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>)
742   ret void
745 define dso_local void @modimm_t6_call() {
746 ; CHECK-LABEL: modimm_t6_call:
747 ; CHECK:       // %bb.0:
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
778 ; CHECK-NEXT:    ret
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>)
788   ret void
791 define dso_local void @modimm_t7_call() {
792 ; CHECK-LABEL: modimm_t7_call:
793 ; CHECK:       // %bb.0:
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
824 ; CHECK-NEXT:    ret
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>)
834   ret void
837 define dso_local void @modimm_t8_call() {
838 ; CHECK-LABEL: modimm_t8_call:
839 ; CHECK:       // %bb.0:
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
870 ; CHECK-NEXT:    ret
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>)
880   ret void
883 define dso_local void @modimm_t9_call() {
884 ; CHECK-LABEL: modimm_t9_call:
885 ; CHECK:       // %bb.0:
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
911 ; CHECK-NEXT:    ret
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>)
919   ret void
922 define dso_local void @modimm_t10_call() {
923 ; CHECK-LABEL: modimm_t10_call:
924 ; CHECK:       // %bb.0:
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
950 ; CHECK-NEXT:    ret
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>)
958   ret void
961 define dso_local void @modimm_t11_call() {
962 ; CHECK-LABEL: modimm_t11_call:
963 ; CHECK:       // %bb.0:
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
994 ; CHECK-NEXT:    ret
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>)
1004   ret void
1007 define dso_local void @modimm_t12_call() {
1008 ; CHECK-LABEL: modimm_t12_call:
1009 ; CHECK:       // %bb.0:
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
1026 ; CHECK-NEXT:    ret
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>)
1031   ret void
1034 define <2 x double> @test_v1f64(<1 x double> %0, ptr %1) {
1035 ; CHECK-LABEL: test_v1f64:
1036 ; CHECK:       // %bb.0:
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
1041 ; CHECK-NEXT:    ret
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