blob: 7eadde48161313e67a2e76fb7e9ed4f0dafc100f [file] [log] [blame]
Tim Northover0dbdfb852014-04-18 13:16:55 +00001; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-AARCH64
2; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ARM64
Tim Northover40e9efd2013-08-01 09:20:35 +00003
4define <8 x i8> @movi8b() {
Tim Northover0dbdfb852014-04-18 13:16:55 +00005; CHECK-LABEL: movi8b:
6; CHECK: movi {{v[0-9]+}}.8b, #{{0x8|8}}
Tim Northover40e9efd2013-08-01 09:20:35 +00007 ret <8 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
8}
9
10define <16 x i8> @movi16b() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000011; CHECK-LABEL: movi16b:
12; CHECK: movi {{v[0-9]+}}.16b, #{{0x8|8}}
Tim Northover40e9efd2013-08-01 09:20:35 +000013 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 >
14}
15
16define <2 x i32> @movi2s_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000017; CHECK-LABEL: movi2s_lsl0:
18; CHECK-AARCH64: movi {{v[0-9]+}}.2s, #0xff
19; CHECK-ARM64: movi {{d[0-9]+}}, #0x0000ff000000ff
Tim Northover40e9efd2013-08-01 09:20:35 +000020 ret <2 x i32> < i32 255, i32 255 >
21}
22
23define <2 x i32> @movi2s_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000024; CHECK-LABEL: movi2s_lsl8:
25; CHECK-AARCH64: movi {{v[0-9]+}}.2s, #0xff, lsl #8
26; CHECK-ARM64: movi {{d[0-9]+}}, #0x00ff000000ff00
Tim Northover40e9efd2013-08-01 09:20:35 +000027 ret <2 x i32> < i32 65280, i32 65280 >
28}
29
30define <2 x i32> @movi2s_lsl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000031; CHECK-LABEL: movi2s_lsl16:
32; CHECK-AARCH64: movi {{v[0-9]+}}.2s, #0xff, lsl #16
33; CHECK-ARM64: movi {{d[0-9]+}}, #0xff000000ff0000
Tim Northover40e9efd2013-08-01 09:20:35 +000034 ret <2 x i32> < i32 16711680, i32 16711680 >
35
36}
37
38define <2 x i32> @movi2s_lsl24() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000039; CHECK-LABEL: movi2s_lsl24:
40; CHECK-AARCH64: movi {{v[0-9]+}}.2s, #0xff, lsl #24
41; CHECK-ARM64: movi {{d[0-9]+}}, #0xff000000ff000000
Tim Northover40e9efd2013-08-01 09:20:35 +000042 ret <2 x i32> < i32 4278190080, i32 4278190080 >
43}
44
45define <4 x i32> @movi4s_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000046; CHECK-LABEL: movi4s_lsl0:
47; CHECK-AARCH64: movi {{v[0-9]+}}.4s, #0xff
48; CHECK-ARM64: movi {{v[0-9]+}}.2d, #0x0000ff000000ff
Tim Northover40e9efd2013-08-01 09:20:35 +000049 ret <4 x i32> < i32 255, i32 255, i32 255, i32 255 >
50}
51
52define <4 x i32> @movi4s_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000053; CHECK-LABEL: movi4s_lsl8:
54; CHECK-AARCH64: movi {{v[0-9]+}}.4s, #0xff, lsl #8
55; CHECK-ARM64: movi {{v[0-9]+}}.2d, #0x00ff000000ff00
Tim Northover40e9efd2013-08-01 09:20:35 +000056 ret <4 x i32> < i32 65280, i32 65280, i32 65280, i32 65280 >
57}
58
59define <4 x i32> @movi4s_lsl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000060; CHECK-LABEL: movi4s_lsl16:
61; CHECK-AARCH64: movi {{v[0-9]+}}.4s, #0xff, lsl #16
62; CHECK-ARM64: movi {{v[0-9]+}}.2d, #0xff000000ff0000
Tim Northover40e9efd2013-08-01 09:20:35 +000063 ret <4 x i32> < i32 16711680, i32 16711680, i32 16711680, i32 16711680 >
64
65}
66
67define <4 x i32> @movi4s_lsl24() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000068; CHECK-LABEL: movi4s_lsl24:
69; CHECK-AARCH64: movi {{v[0-9]+}}.4s, #0xff, lsl #24
70; CHECK-ARM64: movi {{v[0-9]+}}.2d, #0xff000000ff000000
Tim Northover40e9efd2013-08-01 09:20:35 +000071 ret <4 x i32> < i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080 >
72}
73
74define <4 x i16> @movi4h_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000075; CHECK-LABEL: movi4h_lsl0:
76; CHECK-AARCH64: movi {{v[0-9]+}}.4h, #0xff
77; CHECK-ARM64: movi {{d[0-9]+}}, #0xff00ff00ff00ff
Tim Northover40e9efd2013-08-01 09:20:35 +000078 ret <4 x i16> < i16 255, i16 255, i16 255, i16 255 >
79}
80
81define <4 x i16> @movi4h_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000082; CHECK-LABEL: movi4h_lsl8:
83; CHECK-AARCH64: movi {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
84; CHECK-ARM64: movi d0, #0xff00ff00ff00ff00
Tim Northover40e9efd2013-08-01 09:20:35 +000085 ret <4 x i16> < i16 65280, i16 65280, i16 65280, i16 65280 >
86}
87
88define <8 x i16> @movi8h_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000089; CHECK-LABEL: movi8h_lsl0:
90; CHECK-AARCH64: movi {{v[0-9]+}}.8h, #{{0xff|255}}
91; CHECK-ARM64: movi v0.2d, #0xff00ff00ff00ff
Tim Northover40e9efd2013-08-01 09:20:35 +000092 ret <8 x i16> < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255 >
93}
94
95define <8 x i16> @movi8h_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000096; CHECK-LABEL: movi8h_lsl8:
97; CHECK-AARCH64: movi {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
98; CHECK-ARM64: movi v0.2d, #0xff00ff00ff00ff00
Tim Northover40e9efd2013-08-01 09:20:35 +000099 ret <8 x i16> < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
100}
101
102
103define <2 x i32> @mvni2s_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000104; CHECK-LABEL: mvni2s_lsl0:
105; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000106 ret <2 x i32> < i32 4294967279, i32 4294967279 >
107}
108
109define <2 x i32> @mvni2s_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000110; CHECK-LABEL: mvni2s_lsl8:
111; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000112 ret <2 x i32> < i32 4294963199, i32 4294963199 >
113}
114
115define <2 x i32> @mvni2s_lsl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000116; CHECK-LABEL: mvni2s_lsl16:
117; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #16
Tim Northover40e9efd2013-08-01 09:20:35 +0000118 ret <2 x i32> < i32 4293918719, i32 4293918719 >
119}
120
121define <2 x i32> @mvni2s_lsl24() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000122; CHECK-LABEL: mvni2s_lsl24:
123; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #24
Tim Northover40e9efd2013-08-01 09:20:35 +0000124 ret <2 x i32> < i32 4026531839, i32 4026531839 >
125}
126
127define <4 x i32> @mvni4s_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000128; CHECK-LABEL: mvni4s_lsl0:
129; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000130 ret <4 x i32> < i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279 >
131}
132
133define <4 x i32> @mvni4s_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000134; CHECK-LABEL: mvni4s_lsl8:
135; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000136 ret <4 x i32> < i32 4294963199, i32 4294963199, i32 4294963199, i32 4294963199 >
137}
138
139define <4 x i32> @mvni4s_lsl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000140; CHECK-LABEL: mvni4s_lsl16:
141; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #16
Tim Northover40e9efd2013-08-01 09:20:35 +0000142 ret <4 x i32> < i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719 >
143
144}
145
146define <4 x i32> @mvni4s_lsl24() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000147; CHECK-LABEL: mvni4s_lsl24:
148; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #24
Tim Northover40e9efd2013-08-01 09:20:35 +0000149 ret <4 x i32> < i32 4026531839, i32 4026531839, i32 4026531839, i32 4026531839 >
150}
151
152
153define <4 x i16> @mvni4h_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000154; CHECK-LABEL: mvni4h_lsl0:
155; CHECK: mvni {{v[0-9]+}}.4h, #{{0x10|16}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000156 ret <4 x i16> < i16 65519, i16 65519, i16 65519, i16 65519 >
157}
158
159define <4 x i16> @mvni4h_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000160; CHECK-LABEL: mvni4h_lsl8:
161; CHECK: mvni {{v[0-9]+}}.4h, #{{0x10|16}}, lsl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000162 ret <4 x i16> < i16 61439, i16 61439, i16 61439, i16 61439 >
163}
164
165define <8 x i16> @mvni8h_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000166; CHECK-LABEL: mvni8h_lsl0:
167; CHECK: mvni {{v[0-9]+}}.8h, #{{0x10|16}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000168 ret <8 x i16> < i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519 >
169}
170
171define <8 x i16> @mvni8h_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000172; CHECK-LABEL: mvni8h_lsl8:
173; CHECK: mvni {{v[0-9]+}}.8h, #{{0x10|16}}, lsl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000174 ret <8 x i16> < i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439 >
175}
176
177
178define <2 x i32> @movi2s_msl8(<2 x i32> %a) {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000179; CHECK-LABEL: movi2s_msl8:
180; CHECK-AARCH64: movi {{v[0-9]+}}.2s, #0xff, msl #8
181; CHECK-ARM64: movi {{d[0-9]+}}, #0x00ffff0000ffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000182 ret <2 x i32> < i32 65535, i32 65535 >
183}
184
185define <2 x i32> @movi2s_msl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000186; CHECK-LABEL: movi2s_msl16:
187; CHECK-AARCH64: movi {{v[0-9]+}}.2s, #0xff, msl #16
188; CHECK-ARM64: movi d0, #0xffffff00ffffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000189 ret <2 x i32> < i32 16777215, i32 16777215 >
190}
191
192
193define <4 x i32> @movi4s_msl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000194; CHECK-LABEL: movi4s_msl8:
195; CHECK-AARCH64: movi {{v[0-9]+}}.4s, #0xff, msl #8
196; CHECK-ARM64: movi v0.2d, #0x00ffff0000ffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000197 ret <4 x i32> < i32 65535, i32 65535, i32 65535, i32 65535 >
198}
199
200define <4 x i32> @movi4s_msl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000201; CHECK-LABEL: movi4s_msl16:
202; CHECK-AARCH64: movi {{v[0-9]+}}.4s, #0xff, msl #16
203; CHECK-ARM64: movi v0.2d, #0xffffff00ffffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000204 ret <4 x i32> < i32 16777215, i32 16777215, i32 16777215, i32 16777215 >
205}
206
207define <2 x i32> @mvni2s_msl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000208; CHECK-LABEL: mvni2s_msl8:
209; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, msl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000210 ret <2 x i32> < i32 18446744073709547264, i32 18446744073709547264>
211}
212
213define <2 x i32> @mvni2s_msl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000214; CHECK-LABEL: mvni2s_msl16:
215; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, msl #16
Tim Northover40e9efd2013-08-01 09:20:35 +0000216 ret <2 x i32> < i32 18446744073708437504, i32 18446744073708437504>
217}
218
219define <4 x i32> @mvni4s_msl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000220; CHECK-LABEL: mvni4s_msl8:
221; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, msl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000222 ret <4 x i32> < i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264>
223}
224
225define <4 x i32> @mvni4s_msl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000226; CHECK-LABEL: mvni4s_msl16:
227; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, msl #16
Tim Northover40e9efd2013-08-01 09:20:35 +0000228 ret <4 x i32> < i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504>
229}
230
231define <2 x i64> @movi2d() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000232; CHECK-LABEL: movi2d:
233; CHECK: movi {{v[0-9]+}}.2d, #0xff0000ff0000ffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000234 ret <2 x i64> < i64 18374687574888349695, i64 18374687574888349695 >
235}
236
237define <1 x i64> @movid() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000238; CHECK-LABEL: movid:
239; CHECK: movi {{d[0-9]+}}, #0xff0000ff0000ffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000240 ret <1 x i64> < i64 18374687574888349695 >
241}
242
243define <2 x float> @fmov2s() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000244; CHECK-LABEL: fmov2s:
245; CHECK: fmov {{v[0-9]+}}.2s, #{{-12.00000000|-1.200000e\+01}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000246 ret <2 x float> < float -1.2e1, float -1.2e1>
247}
248
249define <4 x float> @fmov4s() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000250; CHECK-LABEL: fmov4s:
251; CHECK: fmov {{v[0-9]+}}.4s, #{{-12.00000000|-1.200000e\+01}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000252 ret <4 x float> < float -1.2e1, float -1.2e1, float -1.2e1, float -1.2e1>
253}
254
255define <2 x double> @fmov2d() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000256; CHECK-LABEL: fmov2d:
257; CHECK: fmov {{v[0-9]+}}.2d, #{{-12.00000000|-1.200000e\+01}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000258 ret <2 x double> < double -1.2e1, double -1.2e1>
259}
260
Ana Pazosbde28282013-12-09 19:29:14 +0000261define <2 x i32> @movi1d_1() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000262; CHECK-LABEL: movi1d_1:
263; CHECK: movi d0, #0x{{0*}}ffffffff0000
Ana Pazosbde28282013-12-09 19:29:14 +0000264 ret <2 x i32> < i32 -65536, i32 65535>
265}
266
267
268declare <2 x i32> @test_movi1d(<2 x i32>, <2 x i32>)
269define <2 x i32> @movi1d() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000270; CHECK-LABEL: movi1d:
Kevin Qin53eaea02013-12-18 06:26:04 +0000271; CHECK: adrp {{x[0-9]+}}, .{{[A-Z0-9_]+}}
Tim Northover0dbdfb852014-04-18 13:16:55 +0000272; CHECK: ldr {{d[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:.{{[A-Z0-9_]+}}]
273; CHECK-NEXT: movi d1, #0x{{0*}}ffffffff0000
Ana Pazosbde28282013-12-09 19:29:14 +0000274 %1 = tail call <2 x i32> @test_movi1d(<2 x i32> <i32 -2147483648, i32 2147450880>, <2 x i32> <i32 -65536, i32 65535>)
275 ret <2 x i32> %1
276}
Tim Northover40e9efd2013-08-01 09:20:35 +0000277