[NVPTX] Add missing patterns for div.approx with immediate denominator
[oota-llvm.git] / test / CodeGen / AArch64 / neon-extract.ll
1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
2
3 define <8 x i8> @test_vext_s8(<8 x i8> %a, <8 x i8> %b) {
4 ; CHECK: test_vext_s8:
5 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x2
6 entry:
7   %vext = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
8   ret <8 x i8> %vext
9 }
10
11 define <4 x i16> @test_vext_s16(<4 x i16> %a, <4 x i16> %b) {
12 ; CHECK: test_vext_s16:
13 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x6
14 entry:
15   %vext = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 3, i32 4, i32 5, i32 6>
16   ret <4 x i16> %vext
17 }
18
19 define <2 x i32> @test_vext_s32(<2 x i32> %a, <2 x i32> %b) {
20 ; CHECK: test_vext_s32:
21 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x4
22 entry:
23   %vext = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 2>
24   ret <2 x i32> %vext
25 }
26
27 define <1 x i64> @test_vext_s64(<1 x i64> %a, <1 x i64> %b) {
28 ; CHECK: test_vext_s64:
29 entry:
30   %vext = shufflevector <1 x i64> %a, <1 x i64> %b, <1 x i32> <i32 0>
31   ret <1 x i64> %vext
32 }
33
34 define <16 x i8> @test_vextq_s8(<16 x i8> %a, <16 x i8> %b) {
35 ; CHECK: test_vextq_s8:
36 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x2
37 entry:
38   %vext = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
39   ret <16 x i8> %vext
40 }
41
42 define <8 x i16> @test_vextq_s16(<8 x i16> %a, <8 x i16> %b) {
43 ; CHECK: test_vextq_s16:
44 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x6
45 entry:
46   %vext = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>
47   ret <8 x i16> %vext
48 }
49
50 define <4 x i32> @test_vextq_s32(<4 x i32> %a, <4 x i32> %b) {
51 ; CHECK: test_vextq_s32:
52 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x4
53 entry:
54   %vext = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 2, i32 3, i32 4>
55   ret <4 x i32> %vext
56 }
57
58 define <2 x i64> @test_vextq_s64(<2 x i64> %a, <2 x i64> %b) {
59 ; CHECK: test_vextq_s64:
60 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x8
61 entry:
62   %vext = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 2>
63   ret <2 x i64> %vext
64 }
65
66 define <8 x i8> @test_vext_u8(<8 x i8> %a, <8 x i8> %b) {
67 ; CHECK: test_vext_u8:
68 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x2
69 entry:
70   %vext = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
71   ret <8 x i8> %vext
72 }
73
74 define <4 x i16> @test_vext_u16(<4 x i16> %a, <4 x i16> %b) {
75 ; CHECK: test_vext_u16:
76 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x6
77 entry:
78   %vext = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 3, i32 4, i32 5, i32 6>
79   ret <4 x i16> %vext
80 }
81
82 define <2 x i32> @test_vext_u32(<2 x i32> %a, <2 x i32> %b) {
83 ; CHECK: test_vext_u32:
84 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x4
85 entry:
86   %vext = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 2>
87   ret <2 x i32> %vext
88 }
89
90 define <1 x i64> @test_vext_u64(<1 x i64> %a, <1 x i64> %b) {
91 ; CHECK: test_vext_u64:
92 entry:
93   %vext = shufflevector <1 x i64> %a, <1 x i64> %b, <1 x i32> <i32 0>
94   ret <1 x i64> %vext
95 }
96
97 define <16 x i8> @test_vextq_u8(<16 x i8> %a, <16 x i8> %b) {
98 ; CHECK: test_vextq_u8:
99 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x2
100 entry:
101   %vext = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
102   ret <16 x i8> %vext
103 }
104
105 define <8 x i16> @test_vextq_u16(<8 x i16> %a, <8 x i16> %b) {
106 ; CHECK: test_vextq_u16:
107 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x6
108 entry:
109   %vext = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>
110   ret <8 x i16> %vext
111 }
112
113 define <4 x i32> @test_vextq_u32(<4 x i32> %a, <4 x i32> %b) {
114 ; CHECK: test_vextq_u32:
115 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x4
116 entry:
117   %vext = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 2, i32 3, i32 4>
118   ret <4 x i32> %vext
119 }
120
121 define <2 x i64> @test_vextq_u64(<2 x i64> %a, <2 x i64> %b) {
122 ; CHECK: test_vextq_u64:
123 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x8
124 entry:
125   %vext = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 2>
126   ret <2 x i64> %vext
127 }
128
129 define <2 x float> @test_vext_f32(<2 x float> %a, <2 x float> %b) {
130 ; CHECK: test_vext_f32:
131 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x4
132 entry:
133   %vext = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 2>
134   ret <2 x float> %vext
135 }
136
137 define <1 x double> @test_vext_f64(<1 x double> %a, <1 x double> %b) {
138 ; CHECK: test_vext_f64:
139 entry:
140   %vext = shufflevector <1 x double> %a, <1 x double> %b, <1 x i32> <i32 0>
141   ret <1 x double> %vext
142 }
143
144 define <4 x float> @test_vextq_f32(<4 x float> %a, <4 x float> %b) {
145 ; CHECK: test_vextq_f32:
146 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x4
147 entry:
148   %vext = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 2, i32 3, i32 4>
149   ret <4 x float> %vext
150 }
151
152 define <2 x double> @test_vextq_f64(<2 x double> %a, <2 x double> %b) {
153 ; CHECK: test_vextq_f64:
154 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x8
155 entry:
156   %vext = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 2>
157   ret <2 x double> %vext
158 }
159
160 define <8 x i8> @test_vext_p8(<8 x i8> %a, <8 x i8> %b) {
161 ; CHECK: test_vext_p8:
162 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x2
163 entry:
164   %vext = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
165   ret <8 x i8> %vext
166 }
167
168 define <4 x i16> @test_vext_p16(<4 x i16> %a, <4 x i16> %b) {
169 ; CHECK: test_vext_p16:
170 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x6
171 entry:
172   %vext = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 3, i32 4, i32 5, i32 6>
173   ret <4 x i16> %vext
174 }
175
176 define <16 x i8> @test_vextq_p8(<16 x i8> %a, <16 x i8> %b) {
177 ; CHECK: test_vextq_p8:
178 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x2
179 entry:
180   %vext = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
181   ret <16 x i8> %vext
182 }
183
184 define <8 x i16> @test_vextq_p16(<8 x i16> %a, <8 x i16> %b) {
185 ; CHECK: test_vextq_p16:
186 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x6
187 entry:
188   %vext = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>
189   ret <8 x i16> %vext
190 }
191
192 define <8 x i8> @test_undef_vext_s8(<8 x i8> %a) {
193 ; CHECK: test_undef_vext_s8:
194 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x2
195 entry:
196   %vext = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 10, i32 10, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
197   ret <8 x i8> %vext
198 }
199
200 define <16 x i8> @test_undef_vextq_s8(<16 x i8> %a) {
201 ; CHECK: test_undef_vextq_s8:
202 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x6
203 entry:
204   %vext = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 20, i32 20, i32 20, i32 20, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 20, i32 20, i32 20, i32 20, i32 20>
205   ret <16 x i8> %vext
206 }
207
208 define <4 x i16> @test_undef_vext_s16(<4 x i16> %a) {
209 ; CHECK: test_undef_vext_s16:
210 ; CHECK: ext {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x4
211 entry:
212   %vext = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 3, i32 4, i32 5>
213   ret <4 x i16> %vext
214 }
215
216 define <8 x i16> @test_undef_vextq_s16(<8 x i16> %a) {
217 ; CHECK: test_undef_vextq_s16:
218 ; CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x6
219 entry:
220   %vext = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 10, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>
221   ret <8 x i16> %vext
222 }