1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon | FileCheck %s
4 define <8 x i8> @test_vget_high_s8(<16 x i8> %a) {
5 ; CHECK-LABEL: test_vget_high_s8:
6 ; CHECK: // %bb.0: // %entry
7 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
8 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
11 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
12 ret <8 x i8> %shuffle.i
15 define <4 x i16> @test_vget_high_s16(<8 x i16> %a) {
16 ; CHECK-LABEL: test_vget_high_s16:
17 ; CHECK: // %bb.0: // %entry
18 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
19 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
22 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
23 ret <4 x i16> %shuffle.i
26 define <2 x i32> @test_vget_high_s32(<4 x i32> %a) {
27 ; CHECK-LABEL: test_vget_high_s32:
28 ; CHECK: // %bb.0: // %entry
29 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
30 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
33 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
34 ret <2 x i32> %shuffle.i
37 define <1 x i64> @test_vget_high_s64(<2 x i64> %a) {
38 ; CHECK-LABEL: test_vget_high_s64:
39 ; CHECK: // %bb.0: // %entry
40 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
41 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
44 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> <i32 1>
45 ret <1 x i64> %shuffle.i
48 define <8 x i8> @test_vget_high_u8(<16 x i8> %a) {
49 ; CHECK-LABEL: test_vget_high_u8:
50 ; CHECK: // %bb.0: // %entry
51 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
52 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
55 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
56 ret <8 x i8> %shuffle.i
59 define <4 x i16> @test_vget_high_u16(<8 x i16> %a) {
60 ; CHECK-LABEL: test_vget_high_u16:
61 ; CHECK: // %bb.0: // %entry
62 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
63 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
66 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
67 ret <4 x i16> %shuffle.i
70 define <2 x i32> @test_vget_high_u32(<4 x i32> %a) {
71 ; CHECK-LABEL: test_vget_high_u32:
72 ; CHECK: // %bb.0: // %entry
73 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
74 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
77 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
78 ret <2 x i32> %shuffle.i
81 define <1 x i64> @test_vget_high_u64(<2 x i64> %a) {
82 ; CHECK-LABEL: test_vget_high_u64:
83 ; CHECK: // %bb.0: // %entry
84 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
85 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
88 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> <i32 1>
89 ret <1 x i64> %shuffle.i
92 define <1 x i64> @test_vget_high_p64(<2 x i64> %a) {
93 ; CHECK-LABEL: test_vget_high_p64:
94 ; CHECK: // %bb.0: // %entry
95 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
96 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
99 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> <i32 1>
100 ret <1 x i64> %shuffle.i
103 define <4 x i16> @test_vget_high_f16(<8 x i16> %a) {
104 ; CHECK-LABEL: test_vget_high_f16:
105 ; CHECK: // %bb.0: // %entry
106 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
107 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
110 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
111 ret <4 x i16> %shuffle.i
114 define <2 x float> @test_vget_high_f32(<4 x float> %a) {
115 ; CHECK-LABEL: test_vget_high_f32:
116 ; CHECK: // %bb.0: // %entry
117 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
118 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
121 %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <2 x i32> <i32 2, i32 3>
122 ret <2 x float> %shuffle.i
125 define <8 x i8> @test_vget_high_p8(<16 x i8> %a) {
126 ; CHECK-LABEL: test_vget_high_p8:
127 ; CHECK: // %bb.0: // %entry
128 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
129 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
132 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
133 ret <8 x i8> %shuffle.i
136 define <4 x i16> @test_vget_high_p16(<8 x i16> %a) {
137 ; CHECK-LABEL: test_vget_high_p16:
138 ; CHECK: // %bb.0: // %entry
139 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
140 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
143 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
144 ret <4 x i16> %shuffle.i
147 define <1 x double> @test_vget_high_f64(<2 x double> %a) {
148 ; CHECK-LABEL: test_vget_high_f64:
149 ; CHECK: // %bb.0: // %entry
150 ; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
151 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
154 %shuffle.i = shufflevector <2 x double> %a, <2 x double> undef, <1 x i32> <i32 1>
155 ret <1 x double> %shuffle.i
158 define <8 x i8> @test_vget_low_s8(<16 x i8> %a) {
159 ; CHECK-LABEL: test_vget_low_s8:
160 ; CHECK: // %bb.0: // %entry
161 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
164 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
165 ret <8 x i8> %shuffle.i
168 define <4 x i16> @test_vget_low_s16(<8 x i16> %a) {
169 ; CHECK-LABEL: test_vget_low_s16:
170 ; CHECK: // %bb.0: // %entry
171 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
174 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
175 ret <4 x i16> %shuffle.i
178 define <2 x i32> @test_vget_low_s32(<4 x i32> %a) {
179 ; CHECK-LABEL: test_vget_low_s32:
180 ; CHECK: // %bb.0: // %entry
181 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
184 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
185 ret <2 x i32> %shuffle.i
188 define <1 x i64> @test_vget_low_s64(<2 x i64> %a) {
189 ; CHECK-LABEL: test_vget_low_s64:
190 ; CHECK: // %bb.0: // %entry
191 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
194 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> zeroinitializer
195 ret <1 x i64> %shuffle.i
198 define <8 x i8> @test_vget_low_u8(<16 x i8> %a) {
199 ; CHECK-LABEL: test_vget_low_u8:
200 ; CHECK: // %bb.0: // %entry
201 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
204 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
205 ret <8 x i8> %shuffle.i
208 define <4 x i16> @test_vget_low_u16(<8 x i16> %a) {
209 ; CHECK-LABEL: test_vget_low_u16:
210 ; CHECK: // %bb.0: // %entry
211 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
214 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
215 ret <4 x i16> %shuffle.i
218 define <2 x i32> @test_vget_low_u32(<4 x i32> %a) {
219 ; CHECK-LABEL: test_vget_low_u32:
220 ; CHECK: // %bb.0: // %entry
221 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
224 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
225 ret <2 x i32> %shuffle.i
228 define <1 x i64> @test_vget_low_u64(<2 x i64> %a) {
229 ; CHECK-LABEL: test_vget_low_u64:
230 ; CHECK: // %bb.0: // %entry
231 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
234 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> zeroinitializer
235 ret <1 x i64> %shuffle.i
238 define <1 x i64> @test_vget_low_p64(<2 x i64> %a) {
239 ; CHECK-LABEL: test_vget_low_p64:
240 ; CHECK: // %bb.0: // %entry
241 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
244 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> zeroinitializer
245 ret <1 x i64> %shuffle.i
248 define <4 x i16> @test_vget_low_f16(<8 x i16> %a) {
249 ; CHECK-LABEL: test_vget_low_f16:
250 ; CHECK: // %bb.0: // %entry
251 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
254 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
255 ret <4 x i16> %shuffle.i
258 define <2 x float> @test_vget_low_f32(<4 x float> %a) {
259 ; CHECK-LABEL: test_vget_low_f32:
260 ; CHECK: // %bb.0: // %entry
261 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
264 %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <2 x i32> <i32 0, i32 1>
265 ret <2 x float> %shuffle.i
268 define <8 x i8> @test_vget_low_p8(<16 x i8> %a) {
269 ; CHECK-LABEL: test_vget_low_p8:
270 ; CHECK: // %bb.0: // %entry
271 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
274 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
275 ret <8 x i8> %shuffle.i
278 define <4 x i16> @test_vget_low_p16(<8 x i16> %a) {
279 ; CHECK-LABEL: test_vget_low_p16:
280 ; CHECK: // %bb.0: // %entry
281 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
284 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
285 ret <4 x i16> %shuffle.i
288 define <1 x double> @test_vget_low_f64(<2 x double> %a) {
289 ; CHECK-LABEL: test_vget_low_f64:
290 ; CHECK: // %bb.0: // %entry
291 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
294 %shuffle.i = shufflevector <2 x double> %a, <2 x double> undef, <1 x i32> zeroinitializer
295 ret <1 x double> %shuffle.i