[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / neon-mov.ll
blob6ad98339e1477383094579b01a92d0875edc2ce3
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-SD
3 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon -global-isel %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define <8 x i8> @movi8b() {
6 ; CHECK-LABEL: movi8b:
7 ; CHECK:       // %bb.0:
8 ; CHECK-NEXT:    movi v0.8b, #8
9 ; CHECK-NEXT:    ret
10    ret <8 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
13 define <16 x i8> @movi16b() {
14 ; CHECK-LABEL: movi16b:
15 ; CHECK:       // %bb.0:
16 ; CHECK-NEXT:    movi v0.16b, #8
17 ; CHECK-NEXT:    ret
18    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 >
21 define <2 x i32> @movi2s_lsl0() {
22 ; CHECK-LABEL: movi2s_lsl0:
23 ; CHECK:       // %bb.0:
24 ; CHECK-NEXT:    movi d0, #0x0000ff000000ff
25 ; CHECK-NEXT:    ret
26    ret <2 x i32> < i32 255, i32 255 >
29 define <2 x i32> @movi2s_lsl8() {
30 ; CHECK-LABEL: movi2s_lsl8:
31 ; CHECK:       // %bb.0:
32 ; CHECK-NEXT:    movi d0, #0x00ff000000ff00
33 ; CHECK-NEXT:    ret
34    ret <2 x i32> < i32 65280, i32 65280 >
37 define <2 x i32> @movi2s_lsl16() {
38 ; CHECK-LABEL: movi2s_lsl16:
39 ; CHECK:       // %bb.0:
40 ; CHECK-NEXT:    movi d0, #0xff000000ff0000
41 ; CHECK-NEXT:    ret
42    ret <2 x i32> < i32 16711680, i32 16711680 >
46 define <2 x i32> @movi2s_lsl24() {
47 ; CHECK-LABEL: movi2s_lsl24:
48 ; CHECK:       // %bb.0:
49 ; CHECK-NEXT:    movi d0, #0xff000000ff000000
50 ; CHECK-NEXT:    ret
51    ret <2 x i32> < i32 4278190080, i32 4278190080 >
54 define <4 x i32> @movi4s_lsl0() {
55 ; CHECK-LABEL: movi4s_lsl0:
56 ; CHECK:       // %bb.0:
57 ; CHECK-NEXT:    movi v0.2d, #0x0000ff000000ff
58 ; CHECK-NEXT:    ret
59    ret <4 x i32> < i32 255, i32 255, i32 255, i32 255 >
62 define <4 x i32> @movi4s_lsl8() {
63 ; CHECK-LABEL: movi4s_lsl8:
64 ; CHECK:       // %bb.0:
65 ; CHECK-NEXT:    movi v0.2d, #0x00ff000000ff00
66 ; CHECK-NEXT:    ret
67    ret <4 x i32> < i32 65280, i32 65280, i32 65280, i32 65280 >
70 define <4 x i32> @movi4s_lsl16() {
71 ; CHECK-LABEL: movi4s_lsl16:
72 ; CHECK:       // %bb.0:
73 ; CHECK-NEXT:    movi v0.2d, #0xff000000ff0000
74 ; CHECK-NEXT:    ret
75    ret <4 x i32> < i32 16711680, i32 16711680, i32 16711680, i32 16711680 >
79 define <4 x i32> @movi4s_lsl24() {
80 ; CHECK-LABEL: movi4s_lsl24:
81 ; CHECK:       // %bb.0:
82 ; CHECK-NEXT:    movi v0.2d, #0xff000000ff000000
83 ; CHECK-NEXT:    ret
84    ret <4 x i32> < i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080 >
87 define <4 x i16> @movi4h_lsl0() {
88 ; CHECK-LABEL: movi4h_lsl0:
89 ; CHECK:       // %bb.0:
90 ; CHECK-NEXT:    movi d0, #0xff00ff00ff00ff
91 ; CHECK-NEXT:    ret
92    ret <4 x i16> < i16 255, i16 255, i16 255, i16 255 >
95 define <4 x i16> @movi4h_lsl8() {
96 ; CHECK-LABEL: movi4h_lsl8:
97 ; CHECK:       // %bb.0:
98 ; CHECK-NEXT:    movi d0, #0xff00ff00ff00ff00
99 ; CHECK-NEXT:    ret
100    ret <4 x i16> < i16 65280, i16 65280, i16 65280, i16 65280 >
103 define <8 x i16> @movi8h_lsl0() {
104 ; CHECK-LABEL: movi8h_lsl0:
105 ; CHECK:       // %bb.0:
106 ; CHECK-NEXT:    movi v0.2d, #0xff00ff00ff00ff
107 ; CHECK-NEXT:    ret
108    ret <8 x i16> < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255 >
111 define <8 x i16> @movi8h_lsl8() {
112 ; CHECK-LABEL: movi8h_lsl8:
113 ; CHECK:       // %bb.0:
114 ; CHECK-NEXT:    movi v0.2d, #0xff00ff00ff00ff00
115 ; CHECK-NEXT:    ret
116    ret <8 x i16> < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
120 define <2 x i32> @mvni2s_lsl0() {
121 ; CHECK-LABEL: mvni2s_lsl0:
122 ; CHECK:       // %bb.0:
123 ; CHECK-NEXT:    mvni v0.2s, #16
124 ; CHECK-NEXT:    ret
125    ret <2 x i32> < i32 4294967279, i32 4294967279 >
128 define <2 x i32> @mvni2s_lsl8() {
129 ; CHECK-LABEL: mvni2s_lsl8:
130 ; CHECK:       // %bb.0:
131 ; CHECK-NEXT:    mvni v0.2s, #16, lsl #8
132 ; CHECK-NEXT:    ret
133    ret <2 x i32> < i32 4294963199, i32 4294963199 >
136 define <2 x i32> @mvni2s_lsl16() {
137 ; CHECK-LABEL: mvni2s_lsl16:
138 ; CHECK:       // %bb.0:
139 ; CHECK-NEXT:    mvni v0.2s, #16, lsl #16
140 ; CHECK-NEXT:    ret
141    ret <2 x i32> < i32 4293918719, i32 4293918719 >
144 define <2 x i32> @mvni2s_lsl24() {
145 ; CHECK-LABEL: mvni2s_lsl24:
146 ; CHECK:       // %bb.0:
147 ; CHECK-NEXT:    mvni v0.2s, #16, lsl #24
148 ; CHECK-NEXT:    ret
149    ret <2 x i32> < i32 4026531839, i32 4026531839 >
152 define <4 x i32> @mvni4s_lsl0() {
153 ; CHECK-LABEL: mvni4s_lsl0:
154 ; CHECK:       // %bb.0:
155 ; CHECK-NEXT:    mvni v0.4s, #16
156 ; CHECK-NEXT:    ret
157    ret <4 x i32> < i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279 >
160 define <4 x i32> @mvni4s_lsl8() {
161 ; CHECK-LABEL: mvni4s_lsl8:
162 ; CHECK:       // %bb.0:
163 ; CHECK-NEXT:    mvni v0.4s, #16, lsl #8
164 ; CHECK-NEXT:    ret
165    ret <4 x i32> < i32 4294963199, i32 4294963199, i32 4294963199, i32 4294963199 >
168 define <4 x i32> @mvni4s_lsl16() {
169 ; CHECK-LABEL: mvni4s_lsl16:
170 ; CHECK:       // %bb.0:
171 ; CHECK-NEXT:    mvni v0.4s, #16, lsl #16
172 ; CHECK-NEXT:    ret
173    ret <4 x i32> < i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719 >
177 define <4 x i32> @mvni4s_lsl24() {
178 ; CHECK-LABEL: mvni4s_lsl24:
179 ; CHECK:       // %bb.0:
180 ; CHECK-NEXT:    mvni v0.4s, #16, lsl #24
181 ; CHECK-NEXT:    ret
182    ret <4 x i32> < i32 4026531839, i32 4026531839, i32 4026531839, i32 4026531839 >
186 define <4 x i16> @mvni4h_lsl0() {
187 ; CHECK-LABEL: mvni4h_lsl0:
188 ; CHECK:       // %bb.0:
189 ; CHECK-NEXT:    mvni v0.4h, #16
190 ; CHECK-NEXT:    ret
191    ret <4 x i16> < i16 65519, i16 65519, i16 65519, i16 65519 >
194 define <4 x i16> @mvni4h_lsl8() {
195 ; CHECK-LABEL: mvni4h_lsl8:
196 ; CHECK:       // %bb.0:
197 ; CHECK-NEXT:    mvni v0.4h, #16, lsl #8
198 ; CHECK-NEXT:    ret
199    ret <4 x i16> < i16 61439, i16 61439, i16 61439, i16 61439 >
202 define <8 x i16> @mvni8h_lsl0() {
203 ; CHECK-LABEL: mvni8h_lsl0:
204 ; CHECK:       // %bb.0:
205 ; CHECK-NEXT:    mvni v0.8h, #16
206 ; CHECK-NEXT:    ret
207    ret <8 x i16> < i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519 >
210 define <8 x i16> @mvni8h_lsl8() {
211 ; CHECK-LABEL: mvni8h_lsl8:
212 ; CHECK:       // %bb.0:
213 ; CHECK-NEXT:    mvni v0.8h, #16, lsl #8
214 ; CHECK-NEXT:    ret
215    ret <8 x i16> < i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439 >
219 define <2 x i32> @movi2s_msl8(<2 x i32> %a) {
220 ; CHECK-LABEL: movi2s_msl8:
221 ; CHECK:       // %bb.0:
222 ; CHECK-NEXT:    movi d0, #0x00ffff0000ffff
223 ; CHECK-NEXT:    ret
224         ret <2 x i32> < i32 65535, i32 65535 >
227 define <2 x i32> @movi2s_msl16() {
228 ; CHECK-LABEL: movi2s_msl16:
229 ; CHECK:       // %bb.0:
230 ; CHECK-NEXT:    movi d0, #0xffffff00ffffff
231 ; CHECK-NEXT:    ret
232    ret <2 x i32> < i32 16777215, i32 16777215 >
236 define <4 x i32> @movi4s_msl8() {
237 ; CHECK-LABEL: movi4s_msl8:
238 ; CHECK:       // %bb.0:
239 ; CHECK-NEXT:    movi v0.2d, #0x00ffff0000ffff
240 ; CHECK-NEXT:    ret
241    ret <4 x i32> < i32 65535, i32 65535, i32 65535, i32 65535 >
244 define <4 x i32> @movi4s_msl16() {
245 ; CHECK-LABEL: movi4s_msl16:
246 ; CHECK:       // %bb.0:
247 ; CHECK-NEXT:    movi v0.2d, #0xffffff00ffffff
248 ; CHECK-NEXT:    ret
249    ret <4 x i32> < i32 16777215, i32 16777215, i32 16777215, i32 16777215 >
252 define <2 x i32> @mvni2s_msl8() {
253 ; CHECK-LABEL: mvni2s_msl8:
254 ; CHECK:       // %bb.0:
255 ; CHECK-NEXT:    mvni v0.2s, #16, msl #8
256 ; CHECK-NEXT:    ret
257    ret <2 x i32> < i32 18446744073709547264, i32 18446744073709547264>
260 define <2 x i32> @mvni2s_msl16() {
261 ; CHECK-LABEL: mvni2s_msl16:
262 ; CHECK:       // %bb.0:
263 ; CHECK-NEXT:    mvni v0.2s, #16, msl #16
264 ; CHECK-NEXT:    ret
265    ret <2 x i32> < i32 18446744073708437504, i32 18446744073708437504>
268 define <4 x i32> @mvni4s_msl8() {
269 ; CHECK-LABEL: mvni4s_msl8:
270 ; CHECK:       // %bb.0:
271 ; CHECK-NEXT:    mvni v0.4s, #16, msl #8
272 ; CHECK-NEXT:    ret
273    ret <4 x i32> < i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264>
276 define <4 x i32> @mvni4s_msl16() {
277 ; CHECK-LABEL: mvni4s_msl16:
278 ; CHECK:       // %bb.0:
279 ; CHECK-NEXT:    mvni v0.4s, #16, msl #16
280 ; CHECK-NEXT:    ret
281    ret <4 x i32> < i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504>
284 define <2 x i64> @movi2d() {
285 ; CHECK-LABEL: movi2d:
286 ; CHECK:       // %bb.0:
287 ; CHECK-NEXT:    movi v0.2d, #0xff0000ff0000ffff
288 ; CHECK-NEXT:    ret
289         ret <2 x i64> < i64 18374687574888349695, i64 18374687574888349695 >
292 define <1 x i64> @movid() {
293 ; CHECK-SD-LABEL: movid:
294 ; CHECK-SD:       // %bb.0:
295 ; CHECK-SD-NEXT:    movi d0, #0xff0000ff0000ffff
296 ; CHECK-SD-NEXT:    ret
298 ; CHECK-GI-LABEL: movid:
299 ; CHECK-GI:       // %bb.0:
300 ; CHECK-GI-NEXT:    mov x8, #-72056494526300161 // =0xff0000ffffffffff
301 ; CHECK-GI-NEXT:    movk x8, #0, lsl #16
302 ; CHECK-GI-NEXT:    fmov d0, x8
303 ; CHECK-GI-NEXT:    ret
304         ret  <1 x i64> < i64 18374687574888349695 >
307 define <2 x float> @fmov2s() {
308 ; CHECK-LABEL: fmov2s:
309 ; CHECK:       // %bb.0:
310 ; CHECK-NEXT:    fmov v0.2s, #-12.00000000
311 ; CHECK-NEXT:    ret
312         ret <2 x float> < float -1.2e1, float -1.2e1>
315 define <4 x float> @fmov4s() {
316 ; CHECK-LABEL: fmov4s:
317 ; CHECK:       // %bb.0:
318 ; CHECK-NEXT:    fmov v0.4s, #-12.00000000
319 ; CHECK-NEXT:    ret
320         ret <4 x float> < float -1.2e1, float -1.2e1, float -1.2e1, float -1.2e1>
323 define <2 x double> @fmov2d() {
324 ; CHECK-LABEL: fmov2d:
325 ; CHECK:       // %bb.0:
326 ; CHECK-NEXT:    fmov v0.2d, #-12.00000000
327 ; CHECK-NEXT:    ret
328         ret <2 x double> < double -1.2e1, double -1.2e1>
331 define <2 x i32> @movi1d_1() {
332 ; CHECK-SD-LABEL: movi1d_1:
333 ; CHECK-SD:       // %bb.0:
334 ; CHECK-SD-NEXT:    movi d0, #0x00ffffffff0000
335 ; CHECK-SD-NEXT:    ret
337 ; CHECK-GI-LABEL: movi1d_1:
338 ; CHECK-GI:       // %bb.0:
339 ; CHECK-GI-NEXT:    adrp x8, .LCPI39_0
340 ; CHECK-GI-NEXT:    ldr d0, [x8, :lo12:.LCPI39_0]
341 ; CHECK-GI-NEXT:    ret
342   ret <2 x i32> < i32  -65536, i32 65535>
346 declare <2 x i32> @test_movi1d(<2 x i32>, <2 x i32>)
347 define <2 x i32> @movi1d() {
348 ; CHECK-SD-LABEL: movi1d:
349 ; CHECK-SD:       // %bb.0:
350 ; CHECK-SD-NEXT:    movi d1, #0x00ffffffff0000
351 ; CHECK-SD-NEXT:    adrp x8, .LCPI40_0
352 ; CHECK-SD-NEXT:    ldr d0, [x8, :lo12:.LCPI40_0]
353 ; CHECK-SD-NEXT:    b test_movi1d
355 ; CHECK-GI-LABEL: movi1d:
356 ; CHECK-GI:       // %bb.0:
357 ; CHECK-GI-NEXT:    adrp x8, .LCPI40_1
358 ; CHECK-GI-NEXT:    adrp x9, .LCPI40_0
359 ; CHECK-GI-NEXT:    ldr d0, [x8, :lo12:.LCPI40_1]
360 ; CHECK-GI-NEXT:    ldr d1, [x9, :lo12:.LCPI40_0]
361 ; CHECK-GI-NEXT:    b test_movi1d
362   %1 = tail call <2 x i32> @test_movi1d(<2 x i32> <i32 -2147483648, i32 2147450880>, <2 x i32> <i32 -65536, i32 65535>)
363   ret <2 x i32> %1