[LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / neon-mov.ll
blob170ba7292ae608a4f0d51106522551f58916026e
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16,CHECK-NOFP16-SD
3 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon,+fullfp16 | FileCheck %s --check-prefixes=CHECK,CHECK-FP16,CHECK-FP16-SD
4 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon -global-isel %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16,CHECK-NOFP16-GI
5 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon,+fullfp16 -global-isel %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FP16,CHECK-FP16-GI
7 define <8 x i8> @movi8b_0() {
8 ; CHECK-LABEL: movi8b_0:
9 ; CHECK:       // %bb.0:
10 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
11 ; CHECK-NEXT:    ret
12    ret <8 x i8> zeroinitializer
15 define <8 x i8> @movi8b() {
16 ; CHECK-LABEL: movi8b:
17 ; CHECK:       // %bb.0:
18 ; CHECK-NEXT:    movi v0.8b, #8
19 ; CHECK-NEXT:    ret
20    ret <8 x i8> <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>
23 define <16 x i8> @movi16b_0() {
24 ; CHECK-LABEL: movi16b_0:
25 ; CHECK:       // %bb.0:
26 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
27 ; CHECK-NEXT:    ret
28    ret <16 x i8> zeroinitializer
31 define <16 x i8> @movi16b() {
32 ; CHECK-LABEL: movi16b:
33 ; CHECK:       // %bb.0:
34 ; CHECK-NEXT:    movi v0.16b, #8
35 ; CHECK-NEXT:    ret
36    ret <16 x i8> <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>
39 define <2 x i32> @movi2s_0() {
40 ; CHECK-LABEL: movi2s_0:
41 ; CHECK:       // %bb.0:
42 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
43 ; CHECK-NEXT:    ret
44    ret <2 x i32> zeroinitializer
47 define <2 x i32> @movi2s_lsl0() {
48 ; CHECK-LABEL: movi2s_lsl0:
49 ; CHECK:       // %bb.0:
50 ; CHECK-NEXT:    movi d0, #0x0000ff000000ff
51 ; CHECK-NEXT:    ret
52    ret <2 x i32> <i32 255, i32 255>
55 define <2 x i32> @movi2s_lsl8() {
56 ; CHECK-LABEL: movi2s_lsl8:
57 ; CHECK:       // %bb.0:
58 ; CHECK-NEXT:    movi d0, #0x00ff000000ff00
59 ; CHECK-NEXT:    ret
60    ret <2 x i32> <i32 65280, i32 65280>
63 define <2 x i32> @movi2s_lsl16() {
64 ; CHECK-LABEL: movi2s_lsl16:
65 ; CHECK:       // %bb.0:
66 ; CHECK-NEXT:    movi d0, #0xff000000ff0000
67 ; CHECK-NEXT:    ret
68    ret <2 x i32> <i32 16711680, i32 16711680>
71 define <2 x i32> @movi2s_lsl24() {
72 ; CHECK-LABEL: movi2s_lsl24:
73 ; CHECK:       // %bb.0:
74 ; CHECK-NEXT:    movi d0, #0xff000000ff000000
75 ; CHECK-NEXT:    ret
76    ret <2 x i32> <i32 4278190080, i32 4278190080>
79 define <4 x i32> @movi4s_0() {
80 ; CHECK-LABEL: movi4s_0:
81 ; CHECK:       // %bb.0:
82 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
83 ; CHECK-NEXT:    ret
84    ret <4 x i32> zeroinitializer
87 define <4 x i32> @movi4s_lsl0() {
88 ; CHECK-LABEL: movi4s_lsl0:
89 ; CHECK:       // %bb.0:
90 ; CHECK-NEXT:    movi v0.2d, #0x0000ff000000ff
91 ; CHECK-NEXT:    ret
92    ret <4 x i32> <i32 255, i32 255, i32 255, i32 255>
95 define <4 x i32> @movi4s_lsl8() {
96 ; CHECK-LABEL: movi4s_lsl8:
97 ; CHECK:       // %bb.0:
98 ; CHECK-NEXT:    movi v0.2d, #0x00ff000000ff00
99 ; CHECK-NEXT:    ret
100    ret <4 x i32> <i32 65280, i32 65280, i32 65280, i32 65280>
103 define <4 x i32> @movi4s_lsl16() {
104 ; CHECK-LABEL: movi4s_lsl16:
105 ; CHECK:       // %bb.0:
106 ; CHECK-NEXT:    movi v0.2d, #0xff000000ff0000
107 ; CHECK-NEXT:    ret
108    ret <4 x i32> <i32 16711680, i32 16711680, i32 16711680, i32 16711680>
111 define <4 x i32> @movi4s_fneg() {
112 ; CHECK-NOFP16-SD-LABEL: movi4s_fneg:
113 ; CHECK-NOFP16-SD:       // %bb.0:
114 ; CHECK-NOFP16-SD-NEXT:    movi v0.4s, #240, lsl #8
115 ; CHECK-NOFP16-SD-NEXT:    fneg v0.4s, v0.4s
116 ; CHECK-NOFP16-SD-NEXT:    ret
118 ; CHECK-FP16-SD-LABEL: movi4s_fneg:
119 ; CHECK-FP16-SD:       // %bb.0:
120 ; CHECK-FP16-SD-NEXT:    movi v0.4s, #240, lsl #8
121 ; CHECK-FP16-SD-NEXT:    fneg v0.4s, v0.4s
122 ; CHECK-FP16-SD-NEXT:    ret
124 ; CHECK-NOFP16-GI-LABEL: movi4s_fneg:
125 ; CHECK-NOFP16-GI:       // %bb.0:
126 ; CHECK-NOFP16-GI-NEXT:    movi v0.4s, #240, lsl #8
127 ; CHECK-NOFP16-GI-NEXT:    fneg v0.4s, v0.4s
128 ; CHECK-NOFP16-GI-NEXT:    ret
130 ; CHECK-FP16-GI-LABEL: movi4s_fneg:
131 ; CHECK-FP16-GI:       // %bb.0:
132 ; CHECK-FP16-GI-NEXT:    movi v0.4s, #240, lsl #8
133 ; CHECK-FP16-GI-NEXT:    fneg v0.4s, v0.4s
134 ; CHECK-FP16-GI-NEXT:    ret
135    ret <4 x i32> <i32 2147545088, i32 2147545088, i32 2147545088, i32 2147545088>
138 define <4 x i32> @movi4s_lsl24() {
139 ; CHECK-LABEL: movi4s_lsl24:
140 ; CHECK:       // %bb.0:
141 ; CHECK-NEXT:    movi v0.2d, #0xff000000ff000000
142 ; CHECK-NEXT:    ret
143    ret <4 x i32> <i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080>
146 define <4 x i16> @movi4h_lsl0() {
147 ; CHECK-LABEL: movi4h_lsl0:
148 ; CHECK:       // %bb.0:
149 ; CHECK-NEXT:    movi d0, #0xff00ff00ff00ff
150 ; CHECK-NEXT:    ret
151    ret <4 x i16> <i16 255, i16 255, i16 255, i16 255>
154 define <4 x i16> @movi4h_lsl8() {
155 ; CHECK-LABEL: movi4h_lsl8:
156 ; CHECK:       // %bb.0:
157 ; CHECK-NEXT:    movi d0, #0xff00ff00ff00ff00
158 ; CHECK-NEXT:    ret
159    ret <4 x i16> <i16 65280, i16 65280, i16 65280, i16 65280>
162 define <8 x i16> @movi8h_lsl0() {
163 ; CHECK-LABEL: movi8h_lsl0:
164 ; CHECK:       // %bb.0:
165 ; CHECK-NEXT:    movi v0.2d, #0xff00ff00ff00ff
166 ; CHECK-NEXT:    ret
167    ret <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
170 define <8 x i16> @movi8h_lsl8() {
171 ; CHECK-LABEL: movi8h_lsl8:
172 ; CHECK:       // %bb.0:
173 ; CHECK-NEXT:    movi v0.2d, #0xff00ff00ff00ff00
174 ; CHECK-NEXT:    ret
175    ret <8 x i16> <i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280>
178 define <8 x i16> @movi8h_fneg() {
179 ; CHECK-NOFP16-SD-LABEL: movi8h_fneg:
180 ; CHECK-NOFP16-SD:       // %bb.0:
181 ; CHECK-NOFP16-SD-NEXT:    movi v0.8h, #127, lsl #8
182 ; CHECK-NOFP16-SD-NEXT:    fneg v0.4s, v0.4s
183 ; CHECK-NOFP16-SD-NEXT:    ret
185 ; CHECK-FP16-SD-LABEL: movi8h_fneg:
186 ; CHECK-FP16-SD:       // %bb.0:
187 ; CHECK-FP16-SD-NEXT:    movi v0.8h, #127, lsl #8
188 ; CHECK-FP16-SD-NEXT:    fneg v0.4s, v0.4s
189 ; CHECK-FP16-SD-NEXT:    ret
191 ; CHECK-NOFP16-GI-LABEL: movi8h_fneg:
192 ; CHECK-NOFP16-GI:       // %bb.0:
193 ; CHECK-NOFP16-GI-NEXT:    adrp x8, .LCPI19_0
194 ; CHECK-NOFP16-GI-NEXT:    ldr q0, [x8, :lo12:.LCPI19_0]
195 ; CHECK-NOFP16-GI-NEXT:    ret
197 ; CHECK-FP16-GI-LABEL: movi8h_fneg:
198 ; CHECK-FP16-GI:       // %bb.0:
199 ; CHECK-FP16-GI-NEXT:    adrp x8, .LCPI19_0
200 ; CHECK-FP16-GI-NEXT:    ldr q0, [x8, :lo12:.LCPI19_0]
201 ; CHECK-FP16-GI-NEXT:    ret
202    ret <8 x i16> <i16 32512, i16 65280, i16 32512, i16 65280, i16 32512, i16 65280, i16 32512, i16 65280>
206 define <2 x i32> @mvni2s_lsl0() {
207 ; CHECK-LABEL: mvni2s_lsl0:
208 ; CHECK:       // %bb.0:
209 ; CHECK-NEXT:    mvni v0.2s, #16
210 ; CHECK-NEXT:    ret
211    ret <2 x i32> <i32 4294967279, i32 4294967279>
214 define <2 x i32> @mvni2s_lsl8() {
215 ; CHECK-LABEL: mvni2s_lsl8:
216 ; CHECK:       // %bb.0:
217 ; CHECK-NEXT:    mvni v0.2s, #16, lsl #8
218 ; CHECK-NEXT:    ret
219    ret <2 x i32> <i32 4294963199, i32 4294963199>
222 define <2 x i32> @mvni2s_lsl16() {
223 ; CHECK-LABEL: mvni2s_lsl16:
224 ; CHECK:       // %bb.0:
225 ; CHECK-NEXT:    mvni v0.2s, #16, lsl #16
226 ; CHECK-NEXT:    ret
227    ret <2 x i32> <i32 4293918719, i32 4293918719>
230 define <2 x i32> @mvni2s_lsl24() {
231 ; CHECK-LABEL: mvni2s_lsl24:
232 ; CHECK:       // %bb.0:
233 ; CHECK-NEXT:    mvni v0.2s, #16, lsl #24
234 ; CHECK-NEXT:    ret
235    ret <2 x i32> <i32 4026531839, i32 4026531839>
238 define <4 x i32> @mvni4s_lsl0() {
239 ; CHECK-LABEL: mvni4s_lsl0:
240 ; CHECK:       // %bb.0:
241 ; CHECK-NEXT:    mvni v0.4s, #16
242 ; CHECK-NEXT:    ret
243    ret <4 x i32> <i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279>
246 define <4 x i32> @mvni4s_lsl8() {
247 ; CHECK-LABEL: mvni4s_lsl8:
248 ; CHECK:       // %bb.0:
249 ; CHECK-NEXT:    mvni v0.4s, #16, lsl #8
250 ; CHECK-NEXT:    ret
251    ret <4 x i32> <i32 4294963199, i32 4294963199, i32 4294963199, i32 4294963199>
254 define <4 x i32> @mvni4s_lsl16() {
255 ; CHECK-LABEL: mvni4s_lsl16:
256 ; CHECK:       // %bb.0:
257 ; CHECK-NEXT:    mvni v0.4s, #16, lsl #16
258 ; CHECK-NEXT:    ret
259    ret <4 x i32> <i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719>
263 define <4 x i32> @mvni4s_lsl24() {
264 ; CHECK-LABEL: mvni4s_lsl24:
265 ; CHECK:       // %bb.0:
266 ; CHECK-NEXT:    mvni v0.4s, #16, lsl #24
267 ; CHECK-NEXT:    ret
268    ret <4 x i32> <i32 4026531839, i32 4026531839, i32 4026531839, i32 4026531839>
272 define <4 x i16> @mvni4h_lsl0() {
273 ; CHECK-LABEL: mvni4h_lsl0:
274 ; CHECK:       // %bb.0:
275 ; CHECK-NEXT:    mvni v0.4h, #16
276 ; CHECK-NEXT:    ret
277    ret <4 x i16> <i16 65519, i16 65519, i16 65519, i16 65519>
280 define <4 x i16> @mvni4h_lsl8() {
281 ; CHECK-LABEL: mvni4h_lsl8:
282 ; CHECK:       // %bb.0:
283 ; CHECK-NEXT:    mvni v0.4h, #16, lsl #8
284 ; CHECK-NEXT:    ret
285    ret <4 x i16> <i16 61439, i16 61439, i16 61439, i16 61439>
288 define <8 x i16> @mvni8h_lsl0() {
289 ; CHECK-LABEL: mvni8h_lsl0:
290 ; CHECK:       // %bb.0:
291 ; CHECK-NEXT:    mvni v0.8h, #16
292 ; CHECK-NEXT:    ret
293    ret <8 x i16> <i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519>
296 define <8 x i16> @mvni8h_lsl8() {
297 ; CHECK-LABEL: mvni8h_lsl8:
298 ; CHECK:       // %bb.0:
299 ; CHECK-NEXT:    mvni v0.8h, #16, lsl #8
300 ; CHECK-NEXT:    ret
301    ret <8 x i16> <i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439>
304 define <8 x i16> @mvni8h_neg() {
305 ; CHECK-NOFP16-SD-LABEL: mvni8h_neg:
306 ; CHECK-NOFP16-SD:       // %bb.0:
307 ; CHECK-NOFP16-SD-NEXT:    mov w8, #33008 // =0x80f0
308 ; CHECK-NOFP16-SD-NEXT:    dup v0.8h, w8
309 ; CHECK-NOFP16-SD-NEXT:    ret
311 ; CHECK-FP16-SD-LABEL: mvni8h_neg:
312 ; CHECK-FP16-SD:       // %bb.0:
313 ; CHECK-FP16-SD-NEXT:    movi v0.8h, #240
314 ; CHECK-FP16-SD-NEXT:    fneg v0.8h, v0.8h
315 ; CHECK-FP16-SD-NEXT:    ret
317 ; CHECK-NOFP16-GI-LABEL: mvni8h_neg:
318 ; CHECK-NOFP16-GI:       // %bb.0:
319 ; CHECK-NOFP16-GI-NEXT:    adrp x8, .LCPI32_0
320 ; CHECK-NOFP16-GI-NEXT:    ldr q0, [x8, :lo12:.LCPI32_0]
321 ; CHECK-NOFP16-GI-NEXT:    ret
323 ; CHECK-FP16-GI-LABEL: mvni8h_neg:
324 ; CHECK-FP16-GI:       // %bb.0:
325 ; CHECK-FP16-GI-NEXT:    movi v0.8h, #240
326 ; CHECK-FP16-GI-NEXT:    fneg v0.8h, v0.8h
327 ; CHECK-FP16-GI-NEXT:    ret
328    ret <8 x i16> <i16 33008, i16 33008, i16 33008, i16 33008, i16 33008, i16 33008, i16 33008, i16 33008>
332 define <2 x i32> @movi2s_msl8(<2 x i32> %a) {
333 ; CHECK-LABEL: movi2s_msl8:
334 ; CHECK:       // %bb.0:
335 ; CHECK-NEXT:    movi d0, #0x00ffff0000ffff
336 ; CHECK-NEXT:    ret
337         ret <2 x i32> <i32 65535, i32 65535>
340 define <2 x i32> @movi2s_msl16() {
341 ; CHECK-LABEL: movi2s_msl16:
342 ; CHECK:       // %bb.0:
343 ; CHECK-NEXT:    movi d0, #0xffffff00ffffff
344 ; CHECK-NEXT:    ret
345    ret <2 x i32> <i32 16777215, i32 16777215>
349 define <4 x i32> @movi4s_msl8() {
350 ; CHECK-LABEL: movi4s_msl8:
351 ; CHECK:       // %bb.0:
352 ; CHECK-NEXT:    movi v0.2d, #0x00ffff0000ffff
353 ; CHECK-NEXT:    ret
354    ret <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>
357 define <4 x i32> @movi4s_msl16() {
358 ; CHECK-LABEL: movi4s_msl16:
359 ; CHECK:       // %bb.0:
360 ; CHECK-NEXT:    movi v0.2d, #0xffffff00ffffff
361 ; CHECK-NEXT:    ret
362    ret <4 x i32> <i32 16777215, i32 16777215, i32 16777215, i32 16777215>
365 define <2 x i32> @mvni2s_msl8() {
366 ; CHECK-LABEL: mvni2s_msl8:
367 ; CHECK:       // %bb.0:
368 ; CHECK-NEXT:    mvni v0.2s, #16, msl #8
369 ; CHECK-NEXT:    ret
370    ret <2 x i32> <i32 18446744073709547264, i32 18446744073709547264>
373 define <2 x i32> @mvni2s_msl16() {
374 ; CHECK-LABEL: mvni2s_msl16:
375 ; CHECK:       // %bb.0:
376 ; CHECK-NEXT:    mvni v0.2s, #16, msl #16
377 ; CHECK-NEXT:    ret
378    ret <2 x i32> <i32 18446744073708437504, i32 18446744073708437504>
381 define <4 x i32> @mvni4s_msl8() {
382 ; CHECK-LABEL: mvni4s_msl8:
383 ; CHECK:       // %bb.0:
384 ; CHECK-NEXT:    mvni v0.4s, #16, msl #8
385 ; CHECK-NEXT:    ret
386    ret <4 x i32> <i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264>
389 define <4 x i32> @mvni4s_msl16() {
390 ; CHECK-LABEL: mvni4s_msl16:
391 ; CHECK:       // %bb.0:
392 ; CHECK-NEXT:    mvni v0.4s, #16, msl #16
393 ; CHECK-NEXT:    ret
394    ret <4 x i32> <i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504>
397 define <2 x i64> @movi2d() {
398 ; CHECK-LABEL: movi2d:
399 ; CHECK:       // %bb.0:
400 ; CHECK-NEXT:    movi v0.2d, #0xff0000ff0000ffff
401 ; CHECK-NEXT:    ret
402         ret <2 x i64> <i64 18374687574888349695, i64 18374687574888349695>
405 define <1 x i64> @movid() {
406 ; CHECK-NOFP16-SD-LABEL: movid:
407 ; CHECK-NOFP16-SD:       // %bb.0:
408 ; CHECK-NOFP16-SD-NEXT:    movi d0, #0xff0000ff0000ffff
409 ; CHECK-NOFP16-SD-NEXT:    ret
411 ; CHECK-FP16-SD-LABEL: movid:
412 ; CHECK-FP16-SD:       // %bb.0:
413 ; CHECK-FP16-SD-NEXT:    movi d0, #0xff0000ff0000ffff
414 ; CHECK-FP16-SD-NEXT:    ret
416 ; CHECK-NOFP16-GI-LABEL: movid:
417 ; CHECK-NOFP16-GI:       // %bb.0:
418 ; CHECK-NOFP16-GI-NEXT:    mov x8, #-72056494526300161 // =0xff0000ffffffffff
419 ; CHECK-NOFP16-GI-NEXT:    movk x8, #0, lsl #16
420 ; CHECK-NOFP16-GI-NEXT:    fmov d0, x8
421 ; CHECK-NOFP16-GI-NEXT:    ret
423 ; CHECK-FP16-GI-LABEL: movid:
424 ; CHECK-FP16-GI:       // %bb.0:
425 ; CHECK-FP16-GI-NEXT:    mov x8, #-72056494526300161 // =0xff0000ffffffffff
426 ; CHECK-FP16-GI-NEXT:    movk x8, #0, lsl #16
427 ; CHECK-FP16-GI-NEXT:    fmov d0, x8
428 ; CHECK-FP16-GI-NEXT:    ret
429         ret  <1 x i64> <i64 18374687574888349695>
432 define <2 x float> @fmov2s_0() {
433 ; CHECK-LABEL: fmov2s_0:
434 ; CHECK:       // %bb.0:
435 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
436 ; CHECK-NEXT:    ret
437         ret <2 x float> zeroinitializer
440 define <2 x float> @fmov2s() {
441 ; CHECK-LABEL: fmov2s:
442 ; CHECK:       // %bb.0:
443 ; CHECK-NEXT:    fmov v0.2s, #-12.00000000
444 ; CHECK-NEXT:    ret
445         ret <2 x float> <float -1.2e1, float -1.2e1>
448 define <2 x float> @fmov2s_neg0() {
449 ; CHECK-LABEL: fmov2s_neg0:
450 ; CHECK:       // %bb.0:
451 ; CHECK-NEXT:    movi v0.2s, #128, lsl #24
452 ; CHECK-NEXT:    ret
453         ret <2 x float> <float -0.0, float -0.0>
456 define <4 x float> @fmov4s_0() {
457 ; CHECK-LABEL: fmov4s_0:
458 ; CHECK:       // %bb.0:
459 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
460 ; CHECK-NEXT:    ret
461         ret <4 x float> zeroinitializer
464 define <4 x float> @fmov4s() {
465 ; CHECK-LABEL: fmov4s:
466 ; CHECK:       // %bb.0:
467 ; CHECK-NEXT:    fmov v0.4s, #-12.00000000
468 ; CHECK-NEXT:    ret
469         ret <4 x float> <float -1.2e1, float -1.2e1, float -1.2e1, float -1.2e1>
472 define <4 x float> @fmov4s_neg0() {
473 ; CHECK-LABEL: fmov4s_neg0:
474 ; CHECK:       // %bb.0:
475 ; CHECK-NEXT:    movi v0.4s, #128, lsl #24
476 ; CHECK-NEXT:    ret
477         ret <4 x float> <float -0.0, float -0.0, float -0.0, float -0.0>
480 define <2 x double> @fmov2d_0() {
481 ; CHECK-LABEL: fmov2d_0:
482 ; CHECK:       // %bb.0:
483 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
484 ; CHECK-NEXT:    ret
485         ret <2 x double> zeroinitializer
488 define <2 x double> @fmov2d() {
489 ; CHECK-LABEL: fmov2d:
490 ; CHECK:       // %bb.0:
491 ; CHECK-NEXT:    fmov v0.2d, #-12.00000000
492 ; CHECK-NEXT:    ret
493         ret <2 x double> <double -1.2e1, double -1.2e1>
496 define <2 x double> @fmov2d_neg0() {
497 ; CHECK-NOFP16-SD-LABEL: fmov2d_neg0:
498 ; CHECK-NOFP16-SD:       // %bb.0:
499 ; CHECK-NOFP16-SD-NEXT:    movi v0.2d, #0000000000000000
500 ; CHECK-NOFP16-SD-NEXT:    fneg v0.2d, v0.2d
501 ; CHECK-NOFP16-SD-NEXT:    ret
503 ; CHECK-FP16-SD-LABEL: fmov2d_neg0:
504 ; CHECK-FP16-SD:       // %bb.0:
505 ; CHECK-FP16-SD-NEXT:    movi v0.2d, #0000000000000000
506 ; CHECK-FP16-SD-NEXT:    fneg v0.2d, v0.2d
507 ; CHECK-FP16-SD-NEXT:    ret
509 ; CHECK-NOFP16-GI-LABEL: fmov2d_neg0:
510 ; CHECK-NOFP16-GI:       // %bb.0:
511 ; CHECK-NOFP16-GI-NEXT:    movi v0.2d, #0000000000000000
512 ; CHECK-NOFP16-GI-NEXT:    fneg v0.2d, v0.2d
513 ; CHECK-NOFP16-GI-NEXT:    ret
515 ; CHECK-FP16-GI-LABEL: fmov2d_neg0:
516 ; CHECK-FP16-GI:       // %bb.0:
517 ; CHECK-FP16-GI-NEXT:    movi v0.2d, #0000000000000000
518 ; CHECK-FP16-GI-NEXT:    fneg v0.2d, v0.2d
519 ; CHECK-FP16-GI-NEXT:    ret
520         ret <2 x double> <double -0.0, double -0.0>
523 define <2 x i32> @movi1d_1() {
524 ; CHECK-NOFP16-SD-LABEL: movi1d_1:
525 ; CHECK-NOFP16-SD:       // %bb.0:
526 ; CHECK-NOFP16-SD-NEXT:    movi d0, #0x00ffffffff0000
527 ; CHECK-NOFP16-SD-NEXT:    ret
529 ; CHECK-FP16-SD-LABEL: movi1d_1:
530 ; CHECK-FP16-SD:       // %bb.0:
531 ; CHECK-FP16-SD-NEXT:    movi d0, #0x00ffffffff0000
532 ; CHECK-FP16-SD-NEXT:    ret
534 ; CHECK-NOFP16-GI-LABEL: movi1d_1:
535 ; CHECK-NOFP16-GI:       // %bb.0:
536 ; CHECK-NOFP16-GI-NEXT:    adrp x8, .LCPI52_0
537 ; CHECK-NOFP16-GI-NEXT:    ldr d0, [x8, :lo12:.LCPI52_0]
538 ; CHECK-NOFP16-GI-NEXT:    ret
540 ; CHECK-FP16-GI-LABEL: movi1d_1:
541 ; CHECK-FP16-GI:       // %bb.0:
542 ; CHECK-FP16-GI-NEXT:    adrp x8, .LCPI52_0
543 ; CHECK-FP16-GI-NEXT:    ldr d0, [x8, :lo12:.LCPI52_0]
544 ; CHECK-FP16-GI-NEXT:    ret
545   ret <2 x i32> <i32  -65536, i32 65535>
549 declare <2 x i32> @test_movi1d(<2 x i32>, <2 x i32>)
550 define <2 x i32> @movi1d() {
551 ; CHECK-NOFP16-SD-LABEL: movi1d:
552 ; CHECK-NOFP16-SD:       // %bb.0:
553 ; CHECK-NOFP16-SD-NEXT:    movi d1, #0x00ffffffff0000
554 ; CHECK-NOFP16-SD-NEXT:    adrp x8, .LCPI53_0
555 ; CHECK-NOFP16-SD-NEXT:    ldr d0, [x8, :lo12:.LCPI53_0]
556 ; CHECK-NOFP16-SD-NEXT:    b test_movi1d
558 ; CHECK-FP16-SD-LABEL: movi1d:
559 ; CHECK-FP16-SD:       // %bb.0:
560 ; CHECK-FP16-SD-NEXT:    movi d1, #0x00ffffffff0000
561 ; CHECK-FP16-SD-NEXT:    adrp x8, .LCPI53_0
562 ; CHECK-FP16-SD-NEXT:    ldr d0, [x8, :lo12:.LCPI53_0]
563 ; CHECK-FP16-SD-NEXT:    b test_movi1d
565 ; CHECK-NOFP16-GI-LABEL: movi1d:
566 ; CHECK-NOFP16-GI:       // %bb.0:
567 ; CHECK-NOFP16-GI-NEXT:    adrp x8, .LCPI53_1
568 ; CHECK-NOFP16-GI-NEXT:    adrp x9, .LCPI53_0
569 ; CHECK-NOFP16-GI-NEXT:    ldr d0, [x8, :lo12:.LCPI53_1]
570 ; CHECK-NOFP16-GI-NEXT:    ldr d1, [x9, :lo12:.LCPI53_0]
571 ; CHECK-NOFP16-GI-NEXT:    b test_movi1d
573 ; CHECK-FP16-GI-LABEL: movi1d:
574 ; CHECK-FP16-GI:       // %bb.0:
575 ; CHECK-FP16-GI-NEXT:    adrp x8, .LCPI53_1
576 ; CHECK-FP16-GI-NEXT:    adrp x9, .LCPI53_0
577 ; CHECK-FP16-GI-NEXT:    ldr d0, [x8, :lo12:.LCPI53_1]
578 ; CHECK-FP16-GI-NEXT:    ldr d1, [x9, :lo12:.LCPI53_0]
579 ; CHECK-FP16-GI-NEXT:    b test_movi1d
580   %1 = tail call <2 x i32> @test_movi1d(<2 x i32> <i32 -2147483648, i32 2147450880>, <2 x i32> <i32 -65536, i32 65535>)
581   ret <2 x i32> %1
583 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
584 ; CHECK-FP16: {{.*}}
585 ; CHECK-NOFP16: {{.*}}