blob: 7882f5189413b47d70eab4a03439b5be7c078b4f [file] [log] [blame]
Mandeep Singh Grang029a0562016-04-19 23:51:52 +00001; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
Tim Northover40e9efd2013-08-01 09:20:35 +00002
3define <8 x i8> @movi8b() {
Tim Northover0dbdfb852014-04-18 13:16:55 +00004; CHECK-LABEL: movi8b:
5; CHECK: movi {{v[0-9]+}}.8b, #{{0x8|8}}
Tim Northover40e9efd2013-08-01 09:20:35 +00006 ret <8 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
7}
8
9define <16 x i8> @movi16b() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000010; CHECK-LABEL: movi16b:
11; CHECK: movi {{v[0-9]+}}.16b, #{{0x8|8}}
Tim Northover40e9efd2013-08-01 09:20:35 +000012 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 >
13}
14
15define <2 x i32> @movi2s_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000016; CHECK-LABEL: movi2s_lsl0:
Tim Northover3b0846e2014-05-24 12:50:23 +000017; CHECK: movi {{d[0-9]+}}, #0x0000ff000000ff
Tim Northover40e9efd2013-08-01 09:20:35 +000018 ret <2 x i32> < i32 255, i32 255 >
19}
20
21define <2 x i32> @movi2s_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000022; CHECK-LABEL: movi2s_lsl8:
Tim Northover3b0846e2014-05-24 12:50:23 +000023; CHECK: movi {{d[0-9]+}}, #0x00ff000000ff00
Tim Northover40e9efd2013-08-01 09:20:35 +000024 ret <2 x i32> < i32 65280, i32 65280 >
25}
26
27define <2 x i32> @movi2s_lsl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000028; CHECK-LABEL: movi2s_lsl16:
Tim Northover3b0846e2014-05-24 12:50:23 +000029; CHECK: movi {{d[0-9]+}}, #0xff000000ff0000
Tim Northover40e9efd2013-08-01 09:20:35 +000030 ret <2 x i32> < i32 16711680, i32 16711680 >
31
32}
33
34define <2 x i32> @movi2s_lsl24() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000035; CHECK-LABEL: movi2s_lsl24:
Tim Northover3b0846e2014-05-24 12:50:23 +000036; CHECK: movi {{d[0-9]+}}, #0xff000000ff000000
Tim Northover40e9efd2013-08-01 09:20:35 +000037 ret <2 x i32> < i32 4278190080, i32 4278190080 >
38}
39
40define <4 x i32> @movi4s_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000041; CHECK-LABEL: movi4s_lsl0:
Tim Northover3b0846e2014-05-24 12:50:23 +000042; CHECK: movi {{v[0-9]+}}.2d, #0x0000ff000000ff
Tim Northover40e9efd2013-08-01 09:20:35 +000043 ret <4 x i32> < i32 255, i32 255, i32 255, i32 255 >
44}
45
46define <4 x i32> @movi4s_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000047; CHECK-LABEL: movi4s_lsl8:
Tim Northover3b0846e2014-05-24 12:50:23 +000048; CHECK: movi {{v[0-9]+}}.2d, #0x00ff000000ff00
Tim Northover40e9efd2013-08-01 09:20:35 +000049 ret <4 x i32> < i32 65280, i32 65280, i32 65280, i32 65280 >
50}
51
52define <4 x i32> @movi4s_lsl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000053; CHECK-LABEL: movi4s_lsl16:
Tim Northover3b0846e2014-05-24 12:50:23 +000054; CHECK: movi {{v[0-9]+}}.2d, #0xff000000ff0000
Tim Northover40e9efd2013-08-01 09:20:35 +000055 ret <4 x i32> < i32 16711680, i32 16711680, i32 16711680, i32 16711680 >
56
57}
58
59define <4 x i32> @movi4s_lsl24() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000060; CHECK-LABEL: movi4s_lsl24:
Tim Northover3b0846e2014-05-24 12:50:23 +000061; CHECK: movi {{v[0-9]+}}.2d, #0xff000000ff000000
Tim Northover40e9efd2013-08-01 09:20:35 +000062 ret <4 x i32> < i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080 >
63}
64
65define <4 x i16> @movi4h_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000066; CHECK-LABEL: movi4h_lsl0:
Tim Northover3b0846e2014-05-24 12:50:23 +000067; CHECK: movi {{d[0-9]+}}, #0xff00ff00ff00ff
Tim Northover40e9efd2013-08-01 09:20:35 +000068 ret <4 x i16> < i16 255, i16 255, i16 255, i16 255 >
69}
70
71define <4 x i16> @movi4h_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000072; CHECK-LABEL: movi4h_lsl8:
Tim Northover3b0846e2014-05-24 12:50:23 +000073; CHECK: movi d0, #0xff00ff00ff00ff00
Tim Northover40e9efd2013-08-01 09:20:35 +000074 ret <4 x i16> < i16 65280, i16 65280, i16 65280, i16 65280 >
75}
76
77define <8 x i16> @movi8h_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000078; CHECK-LABEL: movi8h_lsl0:
Tim Northover3b0846e2014-05-24 12:50:23 +000079; CHECK: movi v0.2d, #0xff00ff00ff00ff
Tim Northover40e9efd2013-08-01 09:20:35 +000080 ret <8 x i16> < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255 >
81}
82
83define <8 x i16> @movi8h_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000084; CHECK-LABEL: movi8h_lsl8:
Tim Northover3b0846e2014-05-24 12:50:23 +000085; CHECK: movi v0.2d, #0xff00ff00ff00ff00
Tim Northover40e9efd2013-08-01 09:20:35 +000086 ret <8 x i16> < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
87}
88
89
90define <2 x i32> @mvni2s_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000091; CHECK-LABEL: mvni2s_lsl0:
92; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}
Tim Northover40e9efd2013-08-01 09:20:35 +000093 ret <2 x i32> < i32 4294967279, i32 4294967279 >
94}
95
96define <2 x i32> @mvni2s_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +000097; CHECK-LABEL: mvni2s_lsl8:
98; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #8
Tim Northover40e9efd2013-08-01 09:20:35 +000099 ret <2 x i32> < i32 4294963199, i32 4294963199 >
100}
101
102define <2 x i32> @mvni2s_lsl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000103; CHECK-LABEL: mvni2s_lsl16:
104; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #16
Tim Northover40e9efd2013-08-01 09:20:35 +0000105 ret <2 x i32> < i32 4293918719, i32 4293918719 >
106}
107
108define <2 x i32> @mvni2s_lsl24() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000109; CHECK-LABEL: mvni2s_lsl24:
110; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #24
Tim Northover40e9efd2013-08-01 09:20:35 +0000111 ret <2 x i32> < i32 4026531839, i32 4026531839 >
112}
113
114define <4 x i32> @mvni4s_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000115; CHECK-LABEL: mvni4s_lsl0:
116; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000117 ret <4 x i32> < i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279 >
118}
119
120define <4 x i32> @mvni4s_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000121; CHECK-LABEL: mvni4s_lsl8:
122; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000123 ret <4 x i32> < i32 4294963199, i32 4294963199, i32 4294963199, i32 4294963199 >
124}
125
126define <4 x i32> @mvni4s_lsl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000127; CHECK-LABEL: mvni4s_lsl16:
128; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #16
Tim Northover40e9efd2013-08-01 09:20:35 +0000129 ret <4 x i32> < i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719 >
130
131}
132
133define <4 x i32> @mvni4s_lsl24() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000134; CHECK-LABEL: mvni4s_lsl24:
135; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #24
Tim Northover40e9efd2013-08-01 09:20:35 +0000136 ret <4 x i32> < i32 4026531839, i32 4026531839, i32 4026531839, i32 4026531839 >
137}
138
139
140define <4 x i16> @mvni4h_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000141; CHECK-LABEL: mvni4h_lsl0:
142; CHECK: mvni {{v[0-9]+}}.4h, #{{0x10|16}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000143 ret <4 x i16> < i16 65519, i16 65519, i16 65519, i16 65519 >
144}
145
146define <4 x i16> @mvni4h_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000147; CHECK-LABEL: mvni4h_lsl8:
148; CHECK: mvni {{v[0-9]+}}.4h, #{{0x10|16}}, lsl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000149 ret <4 x i16> < i16 61439, i16 61439, i16 61439, i16 61439 >
150}
151
152define <8 x i16> @mvni8h_lsl0() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000153; CHECK-LABEL: mvni8h_lsl0:
154; CHECK: mvni {{v[0-9]+}}.8h, #{{0x10|16}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000155 ret <8 x i16> < i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519 >
156}
157
158define <8 x i16> @mvni8h_lsl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000159; CHECK-LABEL: mvni8h_lsl8:
160; CHECK: mvni {{v[0-9]+}}.8h, #{{0x10|16}}, lsl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000161 ret <8 x i16> < i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439 >
162}
163
164
165define <2 x i32> @movi2s_msl8(<2 x i32> %a) {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000166; CHECK-LABEL: movi2s_msl8:
Tim Northover3b0846e2014-05-24 12:50:23 +0000167; CHECK: movi {{d[0-9]+}}, #0x00ffff0000ffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000168 ret <2 x i32> < i32 65535, i32 65535 >
169}
170
171define <2 x i32> @movi2s_msl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000172; CHECK-LABEL: movi2s_msl16:
Tim Northover3b0846e2014-05-24 12:50:23 +0000173; CHECK: movi d0, #0xffffff00ffffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000174 ret <2 x i32> < i32 16777215, i32 16777215 >
175}
176
177
178define <4 x i32> @movi4s_msl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000179; CHECK-LABEL: movi4s_msl8:
Tim Northover3b0846e2014-05-24 12:50:23 +0000180; CHECK: movi v0.2d, #0x00ffff0000ffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000181 ret <4 x i32> < i32 65535, i32 65535, i32 65535, i32 65535 >
182}
183
184define <4 x i32> @movi4s_msl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000185; CHECK-LABEL: movi4s_msl16:
Tim Northover3b0846e2014-05-24 12:50:23 +0000186; CHECK: movi v0.2d, #0xffffff00ffffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000187 ret <4 x i32> < i32 16777215, i32 16777215, i32 16777215, i32 16777215 >
188}
189
190define <2 x i32> @mvni2s_msl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000191; CHECK-LABEL: mvni2s_msl8:
192; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, msl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000193 ret <2 x i32> < i32 18446744073709547264, i32 18446744073709547264>
194}
195
196define <2 x i32> @mvni2s_msl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000197; CHECK-LABEL: mvni2s_msl16:
198; CHECK: mvni {{v[0-9]+}}.2s, #{{0x10|16}}, msl #16
Tim Northover40e9efd2013-08-01 09:20:35 +0000199 ret <2 x i32> < i32 18446744073708437504, i32 18446744073708437504>
200}
201
202define <4 x i32> @mvni4s_msl8() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000203; CHECK-LABEL: mvni4s_msl8:
204; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, msl #8
Tim Northover40e9efd2013-08-01 09:20:35 +0000205 ret <4 x i32> < i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264>
206}
207
208define <4 x i32> @mvni4s_msl16() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000209; CHECK-LABEL: mvni4s_msl16:
210; CHECK: mvni {{v[0-9]+}}.4s, #{{0x10|16}}, msl #16
Tim Northover40e9efd2013-08-01 09:20:35 +0000211 ret <4 x i32> < i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504>
212}
213
214define <2 x i64> @movi2d() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000215; CHECK-LABEL: movi2d:
216; CHECK: movi {{v[0-9]+}}.2d, #0xff0000ff0000ffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000217 ret <2 x i64> < i64 18374687574888349695, i64 18374687574888349695 >
218}
219
220define <1 x i64> @movid() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000221; CHECK-LABEL: movid:
222; CHECK: movi {{d[0-9]+}}, #0xff0000ff0000ffff
Tim Northover40e9efd2013-08-01 09:20:35 +0000223 ret <1 x i64> < i64 18374687574888349695 >
224}
225
226define <2 x float> @fmov2s() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000227; CHECK-LABEL: fmov2s:
228; CHECK: fmov {{v[0-9]+}}.2s, #{{-12.00000000|-1.200000e\+01}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000229 ret <2 x float> < float -1.2e1, float -1.2e1>
230}
231
232define <4 x float> @fmov4s() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000233; CHECK-LABEL: fmov4s:
234; CHECK: fmov {{v[0-9]+}}.4s, #{{-12.00000000|-1.200000e\+01}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000235 ret <4 x float> < float -1.2e1, float -1.2e1, float -1.2e1, float -1.2e1>
236}
237
238define <2 x double> @fmov2d() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000239; CHECK-LABEL: fmov2d:
240; CHECK: fmov {{v[0-9]+}}.2d, #{{-12.00000000|-1.200000e\+01}}
Tim Northover40e9efd2013-08-01 09:20:35 +0000241 ret <2 x double> < double -1.2e1, double -1.2e1>
242}
243
Ana Pazosbde28282013-12-09 19:29:14 +0000244define <2 x i32> @movi1d_1() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000245; CHECK-LABEL: movi1d_1:
246; CHECK: movi d0, #0x{{0*}}ffffffff0000
Ana Pazosbde28282013-12-09 19:29:14 +0000247 ret <2 x i32> < i32 -65536, i32 65535>
248}
249
250
251declare <2 x i32> @test_movi1d(<2 x i32>, <2 x i32>)
252define <2 x i32> @movi1d() {
Tim Northover0dbdfb852014-04-18 13:16:55 +0000253; CHECK-LABEL: movi1d:
Kevin Qin53eaea02013-12-18 06:26:04 +0000254; CHECK: adrp {{x[0-9]+}}, .{{[A-Z0-9_]+}}
Tim Northover0dbdfb852014-04-18 13:16:55 +0000255; CHECK: ldr {{d[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:.{{[A-Z0-9_]+}}]
256; CHECK-NEXT: movi d1, #0x{{0*}}ffffffff0000
Ana Pazosbde28282013-12-09 19:29:14 +0000257 %1 = tail call <2 x i32> @test_movi1d(<2 x i32> <i32 -2147483648, i32 2147450880>, <2 x i32> <i32 -65536, i32 65535>)
258 ret <2 x i32> %1
259}
Tim Northover40e9efd2013-08-01 09:20:35 +0000260