blob: 1c86e38d060461559930151526f4528f7a21f9e5 [file] [log] [blame]
Zaara Syeda79acbbe2017-06-08 17:14:36 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Tony Jiang9a91a182017-07-05 16:00:38 +00002; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-gnu-linux -mcpu=pwr9 < %s | FileCheck %s -check-prefix=CHECK-LE
3; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-gnu-linux -mcpu=pwr9 < %s | FileCheck %s -check-prefix=CHECK-BE
Zaara Syeda79acbbe2017-06-08 17:14:36 +00004
Tony Jiang9a91a182017-07-05 16:00:38 +00005define <4 x i32> @vextsb2wLE(<16 x i8> %a) {
6; CHECK-LE-LABEL: vextsb2wLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00007; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +00008; CHECK-LE-NEXT: vextsb2w 2, 2
9; CHECK-LE-NEXT: blr
10; CHECK-BE-LABEL: vextsb2wLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000011; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +000012; CHECK-BE: vperm 2, 2, 2, 3
13; CHECK-BE-NEXT: vextsb2w 2, 2
14; CHECK-BE-NEXT: blr
15
Zaara Syeda79acbbe2017-06-08 17:14:36 +000016entry:
17 %vecext = extractelement <16 x i8> %a, i32 0
18 %conv = sext i8 %vecext to i32
19 %vecinit = insertelement <4 x i32> undef, i32 %conv, i32 0
20 %vecext1 = extractelement <16 x i8> %a, i32 4
21 %conv2 = sext i8 %vecext1 to i32
22 %vecinit3 = insertelement <4 x i32> %vecinit, i32 %conv2, i32 1
23 %vecext4 = extractelement <16 x i8> %a, i32 8
24 %conv5 = sext i8 %vecext4 to i32
25 %vecinit6 = insertelement <4 x i32> %vecinit3, i32 %conv5, i32 2
26 %vecext7 = extractelement <16 x i8> %a, i32 12
27 %conv8 = sext i8 %vecext7 to i32
28 %vecinit9 = insertelement <4 x i32> %vecinit6, i32 %conv8, i32 3
29 ret <4 x i32> %vecinit9
30}
31
Tony Jiang9a91a182017-07-05 16:00:38 +000032define <2 x i64> @vextsb2dLE(<16 x i8> %a) {
33; CHECK-LE-LABEL: vextsb2dLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000034; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +000035; CHECK-LE-NEXT: vextsb2d 2, 2
36; CHECK-LE-NEXT: blr
37; CHECK-BE-LABEL: vextsb2dLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000038; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +000039; CHECK-BE: vperm 2, 2, 2, 3
40; CHECK-BE-NEXT: vextsb2d 2, 2
41; CHECK-BE-NEXT: blr
42
Zaara Syeda79acbbe2017-06-08 17:14:36 +000043entry:
44 %vecext = extractelement <16 x i8> %a, i32 0
45 %conv = sext i8 %vecext to i64
46 %vecinit = insertelement <2 x i64> undef, i64 %conv, i32 0
47 %vecext1 = extractelement <16 x i8> %a, i32 8
48 %conv2 = sext i8 %vecext1 to i64
49 %vecinit3 = insertelement <2 x i64> %vecinit, i64 %conv2, i32 1
50 ret <2 x i64> %vecinit3
51}
52
Tony Jiang9a91a182017-07-05 16:00:38 +000053define <4 x i32> @vextsh2wLE(<8 x i16> %a) {
54; CHECK-LE-LABEL: vextsh2wLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000055; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +000056; CHECK-LE-NEXT: vextsh2w 2, 2
57; CHECK-LE-NEXT: blr
58; CHECK-BE-LABEL: vextsh2wLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000059; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +000060; CHECK-BE: vperm 2, 2, 2, 3
61; CHECK-BE-NEXT: vextsh2w 2, 2
62; CHECK-BE-NEXT: blr
63
Zaara Syeda79acbbe2017-06-08 17:14:36 +000064entry:
65 %vecext = extractelement <8 x i16> %a, i32 0
66 %conv = sext i16 %vecext to i32
67 %vecinit = insertelement <4 x i32> undef, i32 %conv, i32 0
68 %vecext1 = extractelement <8 x i16> %a, i32 2
69 %conv2 = sext i16 %vecext1 to i32
70 %vecinit3 = insertelement <4 x i32> %vecinit, i32 %conv2, i32 1
71 %vecext4 = extractelement <8 x i16> %a, i32 4
72 %conv5 = sext i16 %vecext4 to i32
73 %vecinit6 = insertelement <4 x i32> %vecinit3, i32 %conv5, i32 2
74 %vecext7 = extractelement <8 x i16> %a, i32 6
75 %conv8 = sext i16 %vecext7 to i32
76 %vecinit9 = insertelement <4 x i32> %vecinit6, i32 %conv8, i32 3
77 ret <4 x i32> %vecinit9
78}
79
Tony Jiang9a91a182017-07-05 16:00:38 +000080define <2 x i64> @vextsh2dLE(<8 x i16> %a) {
81; CHECK-LE-LABEL: vextsh2dLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000082; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +000083; CHECK-LE-NEXT: vextsh2d 2, 2
84; CHECK-LE-NEXT: blr
85; CHECK-BE-LABEL: vextsh2dLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000086; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +000087; CHECK-BE: vperm 2, 2, 2, 3
88; CHECK-BE-NEXT: vextsh2d 2, 2
89; CHECK-BE-NEXT: blr
90
Zaara Syeda79acbbe2017-06-08 17:14:36 +000091entry:
92 %vecext = extractelement <8 x i16> %a, i32 0
93 %conv = sext i16 %vecext to i64
94 %vecinit = insertelement <2 x i64> undef, i64 %conv, i32 0
95 %vecext1 = extractelement <8 x i16> %a, i32 4
96 %conv2 = sext i16 %vecext1 to i64
97 %vecinit3 = insertelement <2 x i64> %vecinit, i64 %conv2, i32 1
98 ret <2 x i64> %vecinit3
99}
100
Tony Jiang9a91a182017-07-05 16:00:38 +0000101define <2 x i64> @vextsw2dLE(<4 x i32> %a) {
102; CHECK-LE-LABEL: vextsw2dLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000103; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000104; CHECK-LE-NEXT: vextsw2d 2, 2
105; CHECK-LE-NEXT: blr
106; CHECK-BE-LABEL: vextsw2dLE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000107; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000108; CHECK-BE: vmrgew
109; CHECK-BE-NEXT: vextsw2d 2, 2
110; CHECK-BE-NEXT: blr
111
Zaara Syeda79acbbe2017-06-08 17:14:36 +0000112entry:
113 %vecext = extractelement <4 x i32> %a, i32 0
114 %conv = sext i32 %vecext to i64
115 %vecinit = insertelement <2 x i64> undef, i64 %conv, i32 0
116 %vecext1 = extractelement <4 x i32> %a, i32 2
117 %conv2 = sext i32 %vecext1 to i64
118 %vecinit3 = insertelement <2 x i64> %vecinit, i64 %conv2, i32 1
119 ret <2 x i64> %vecinit3
120}
Tony Jiang9a91a182017-07-05 16:00:38 +0000121
122define <4 x i32> @vextsb2wBE(<16 x i8> %a) {
123; CHECK-BE-LABEL: vextsb2wBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000124; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000125; CHECK-BE-NEXT: vextsb2w 2, 2
126; CHECK-BE-NEXT: blr
127; CHECK-LE-LABEL: vextsb2wBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000128; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000129; CHECK-LE-NEXT: vsldoi 2, 2, 2, 13
130; CHECK-LE-NEXT: vextsb2w 2, 2
131; CHECK-LE-NEXT: blr
132entry:
133 %vecext = extractelement <16 x i8> %a, i32 3
134 %conv = sext i8 %vecext to i32
135 %vecinit = insertelement <4 x i32> undef, i32 %conv, i32 0
136 %vecext1 = extractelement <16 x i8> %a, i32 7
137 %conv2 = sext i8 %vecext1 to i32
138 %vecinit3 = insertelement <4 x i32> %vecinit, i32 %conv2, i32 1
139 %vecext4 = extractelement <16 x i8> %a, i32 11
140 %conv5 = sext i8 %vecext4 to i32
141 %vecinit6 = insertelement <4 x i32> %vecinit3, i32 %conv5, i32 2
142 %vecext7 = extractelement <16 x i8> %a, i32 15
143 %conv8 = sext i8 %vecext7 to i32
144 %vecinit9 = insertelement <4 x i32> %vecinit6, i32 %conv8, i32 3
145 ret <4 x i32> %vecinit9
146}
147
148define <2 x i64> @vextsb2dBE(<16 x i8> %a) {
149; CHECK-BE-LABEL: vextsb2dBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000150; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000151; CHECK-BE-NEXT: vextsb2d 2, 2
152; CHECK-BE-NEXT: blr
153; CHECK-LE-LABEL: vextsb2dBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000154; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000155; CHECK-LE-NEXT: vsldoi 2, 2, 2, 9
156; CHECK-LE-NEXT: vextsb2d 2, 2
157; CHECK-LE-NEXT: blr
158entry:
159 %vecext = extractelement <16 x i8> %a, i32 7
160 %conv = sext i8 %vecext to i64
161 %vecinit = insertelement <2 x i64> undef, i64 %conv, i32 0
162 %vecext1 = extractelement <16 x i8> %a, i32 15
163 %conv2 = sext i8 %vecext1 to i64
164 %vecinit3 = insertelement <2 x i64> %vecinit, i64 %conv2, i32 1
165 ret <2 x i64> %vecinit3
166}
167
168define <4 x i32> @vextsh2wBE(<8 x i16> %a) {
169; CHECK-BE-LABEL: vextsh2wBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000170; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000171; CHECK-BE-NEXT: vextsh2w 2, 2
172; CHECK-BE-NEXT: blr
173; CHECK-LE-LABEL: vextsh2wBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000174; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000175; CHECK-LE-NEXT: vsldoi 2, 2, 2, 14
176; CHECK-LE-NEXT: vextsh2w 2, 2
177; CHECK-LE-NEXT: blr
178entry:
179 %vecext = extractelement <8 x i16> %a, i32 1
180 %conv = sext i16 %vecext to i32
181 %vecinit = insertelement <4 x i32> undef, i32 %conv, i32 0
182 %vecext1 = extractelement <8 x i16> %a, i32 3
183 %conv2 = sext i16 %vecext1 to i32
184 %vecinit3 = insertelement <4 x i32> %vecinit, i32 %conv2, i32 1
185 %vecext4 = extractelement <8 x i16> %a, i32 5
186 %conv5 = sext i16 %vecext4 to i32
187 %vecinit6 = insertelement <4 x i32> %vecinit3, i32 %conv5, i32 2
188 %vecext7 = extractelement <8 x i16> %a, i32 7
189 %conv8 = sext i16 %vecext7 to i32
190 %vecinit9 = insertelement <4 x i32> %vecinit6, i32 %conv8, i32 3
191 ret <4 x i32> %vecinit9
192}
193
194define <2 x i64> @vextsh2dBE(<8 x i16> %a) {
195; CHECK-BE-LABEL: vextsh2dBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000196; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000197; CHECK-BE-NEXT: vextsh2d 2, 2
198; CHECK-BE-NEXT: blr
199; CHECK-LE-LABEL: vextsh2dBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000200; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000201; CHECK-LE-NEXT: vsldoi 2, 2, 2, 10
202; CHECK-LE-NEXT: vextsh2d 2, 2
203; CHECK-LE-NEXT: blr
204entry:
205 %vecext = extractelement <8 x i16> %a, i32 3
206 %conv = sext i16 %vecext to i64
207 %vecinit = insertelement <2 x i64> undef, i64 %conv, i32 0
208 %vecext1 = extractelement <8 x i16> %a, i32 7
209 %conv2 = sext i16 %vecext1 to i64
210 %vecinit3 = insertelement <2 x i64> %vecinit, i64 %conv2, i32 1
211 ret <2 x i64> %vecinit3
212}
213
214define <2 x i64> @vextsw2dBE(<4 x i32> %a) {
215; CHECK-BE-LABEL: vextsw2dBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000216; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000217; CHECK-BE-NEXT: vextsw2d 2, 2
218; CHECK-BE-NEXT: blr
219; CHECK-LE-LABEL: vextsw2dBE:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000220; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000221; CHECK-LE-NEXT: vsldoi 2, 2, 2, 12
222; CHECK-LE-NEXT: vextsw2d 2, 2
223; CHECK-LE-NEXT: blr
224entry:
225 %vecext = extractelement <4 x i32> %a, i32 1
226 %conv = sext i32 %vecext to i64
227 %vecinit = insertelement <2 x i64> undef, i64 %conv, i32 0
228 %vecext1 = extractelement <4 x i32> %a, i32 3
229 %conv2 = sext i32 %vecext1 to i64
230 %vecinit3 = insertelement <2 x i64> %vecinit, i64 %conv2, i32 1
231 ret <2 x i64> %vecinit3
232}
233
234define <2 x i64> @vextDiffVectors(<4 x i32> %a, <4 x i32> %b) {
235; CHECK-LE-LABEL: vextDiffVectors:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000236; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000237; CHECK-LE-NOT: vextsw2d
238
239; CHECK-BE-LABEL: vextDiffVectors:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000240; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000241; CHECK-BE-NOT: vextsw2d
242entry:
243 %vecext = extractelement <4 x i32> %a, i32 0
244 %conv = sext i32 %vecext to i64
245 %vecinit = insertelement <2 x i64> undef, i64 %conv, i32 0
246 %vecext1 = extractelement <4 x i32> %b, i32 2
247 %conv2 = sext i32 %vecext1 to i64
248 %vecinit3 = insertelement <2 x i64> %vecinit, i64 %conv2, i32 1
249 ret <2 x i64> %vecinit3
250}
251
252define <8 x i16> @testInvalidExtend(<16 x i8> %a) {
253entry:
254; CHECK-LE-LABEL: testInvalidExtend:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000255; CHECK-LE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000256; CHECK-LE-NOT: vexts
257
258; CHECK-BE-LABEL: testInvalidExtend:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000259; CHECK-BE: # %bb.0: # %entry
Tony Jiang9a91a182017-07-05 16:00:38 +0000260; CHECK-BE-NOT: vexts
261
262 %vecext = extractelement <16 x i8> %a, i32 0
263 %conv = sext i8 %vecext to i16
264 %vecinit = insertelement <8 x i16> undef, i16 %conv, i32 0
265 %vecext1 = extractelement <16 x i8> %a, i32 2
266 %conv2 = sext i8 %vecext1 to i16
267 %vecinit3 = insertelement <8 x i16> %vecinit, i16 %conv2, i32 1
268 %vecext4 = extractelement <16 x i8> %a, i32 4
269 %conv5 = sext i8 %vecext4 to i16
270 %vecinit6 = insertelement <8 x i16> %vecinit3, i16 %conv5, i32 2
271 %vecext7 = extractelement <16 x i8> %a, i32 6
272 %conv8 = sext i8 %vecext7 to i16
273 %vecinit9 = insertelement <8 x i16> %vecinit6, i16 %conv8, i32 3
274 %vecext10 = extractelement <16 x i8> %a, i32 8
275 %conv11 = sext i8 %vecext10 to i16
276 %vecinit12 = insertelement <8 x i16> %vecinit9, i16 %conv11, i32 4
277 %vecext13 = extractelement <16 x i8> %a, i32 10
278 %conv14 = sext i8 %vecext13 to i16
279 %vecinit15 = insertelement <8 x i16> %vecinit12, i16 %conv14, i32 5
280 %vecext16 = extractelement <16 x i8> %a, i32 12
281 %conv17 = sext i8 %vecext16 to i16
282 %vecinit18 = insertelement <8 x i16> %vecinit15, i16 %conv17, i32 6
283 %vecext19 = extractelement <16 x i8> %a, i32 14
284 %conv20 = sext i8 %vecext19 to i16
285 %vecinit21 = insertelement <8 x i16> %vecinit18, i16 %conv20, i32 7
286 ret <8 x i16> %vecinit21
287}