blob: 3ab4cc9045b4e53f2fb9839dd01f5738df93dc21 [file] [log] [blame]
Bill Schmidtf910a062014-06-10 14:35:01 +00001; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -mattr=+altivec | FileCheck %s
2
3define void @VPKUHUM_xy(<16 x i8>* %A, <16 x i8>* %B) {
4entry:
5; CHECK: VPKUHUM_xy:
6 %tmp = load <16 x i8>* %A
7 %tmp2 = load <16 x i8>* %B
8 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
9; CHECK: vpkuhum
10 store <16 x i8> %tmp3, <16 x i8>* %A
11 ret void
12}
13
14define void @VPKUHUM_xx(<16 x i8>* %A) {
15entry:
16; CHECK: VPKUHUM_xx:
17 %tmp = load <16 x i8>* %A
18 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
19; CHECK: vpkuhum
20 store <16 x i8> %tmp2, <16 x i8>* %A
21 ret void
22}
23
24define void @VPKUWUM_xy(<16 x i8>* %A, <16 x i8>* %B) {
25entry:
26; CHECK: VPKUWUM_xy:
27 %tmp = load <16 x i8>* %A
28 %tmp2 = load <16 x i8>* %B
29 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 0, i32 1, i32 4, i32 5, i32 8, i32 9, i32 12, i32 13, i32 16, i32 17, i32 20, i32 21, i32 24, i32 25, i32 28, i32 29>
30; CHECK: vpkuwum
31 store <16 x i8> %tmp3, <16 x i8>* %A
32 ret void
33}
34
35define void @VPKUWUM_xx(<16 x i8>* %A) {
36entry:
37; CHECK: VPKUWUM_xx:
38 %tmp = load <16 x i8>* %A
39 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 0, i32 1, i32 4, i32 5, i32 8, i32 9, i32 12, i32 13, i32 0, i32 1, i32 4, i32 5, i32 8, i32 9, i32 12, i32 13>
40; CHECK: vpkuwum
41 store <16 x i8> %tmp2, <16 x i8>* %A
42 ret void
43}
44
45define void @VMRGLB_xy(<16 x i8>* %A, <16 x i8>* %B) {
46entry:
47; CHECK: VMRGLB_xy:
48 %tmp = load <16 x i8>* %A
49 %tmp2 = load <16 x i8>* %B
50 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
Bill Schmidtc9fa5dd2014-07-25 01:55:55 +000051; CHECK: lvx [[REG1:[0-9]+]]
52; CHECK: lvx [[REG2:[0-9]+]]
53; CHECK: vmrglb [[REG3:[0-9]+]], [[REG2]], [[REG1]]
Bill Schmidtf910a062014-06-10 14:35:01 +000054 store <16 x i8> %tmp3, <16 x i8>* %A
55 ret void
56}
57
58define void @VMRGLB_xx(<16 x i8>* %A) {
59entry:
60; CHECK: VMRGLB_xx:
61 %tmp = load <16 x i8>* %A
62 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3, i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 7, i32 7>
63; CHECK: vmrglb
64 store <16 x i8> %tmp2, <16 x i8>* %A
65 ret void
66}
67
68define void @VMRGHB_xy(<16 x i8>* %A, <16 x i8>* %B) {
69entry:
70; CHECK: VMRGHB_xy:
71 %tmp = load <16 x i8>* %A
72 %tmp2 = load <16 x i8>* %B
73 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
Bill Schmidtc9fa5dd2014-07-25 01:55:55 +000074; CHECK: lvx [[REG1:[0-9]+]]
75; CHECK: lvx [[REG2:[0-9]+]]
76; CHECK: vmrghb [[REG3:[0-9]+]], [[REG2]], [[REG1]]
Bill Schmidtf910a062014-06-10 14:35:01 +000077 store <16 x i8> %tmp3, <16 x i8>* %A
78 ret void
79}
80
81define void @VMRGHB_xx(<16 x i8>* %A) {
82entry:
83; CHECK: VMRGHB_xx:
84 %tmp = load <16 x i8>* %A
85 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 8, i32 8, i32 9, i32 9, i32 10, i32 10, i32 11, i32 11, i32 12, i32 12, i32 13, i32 13, i32 14, i32 14, i32 15, i32 15>
86; CHECK: vmrghb
87 store <16 x i8> %tmp2, <16 x i8>* %A
88 ret void
89}
90
91define void @VMRGLH_xy(<16 x i8>* %A, <16 x i8>* %B) {
92entry:
93; CHECK: VMRGLH_xy:
94 %tmp = load <16 x i8>* %A
95 %tmp2 = load <16 x i8>* %B
96 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 2, i32 3, i32 18, i32 19, i32 4, i32 5, i32 20, i32 21, i32 6, i32 7, i32 22, i32 23>
Bill Schmidtc9fa5dd2014-07-25 01:55:55 +000097; CHECK: lvx [[REG1:[0-9]+]]
98; CHECK: lvx [[REG2:[0-9]+]]
99; CHECK: vmrglh [[REG3:[0-9]+]], [[REG2]], [[REG1]]
Bill Schmidtf910a062014-06-10 14:35:01 +0000100 store <16 x i8> %tmp3, <16 x i8>* %A
101 ret void
102}
103
104define void @VMRGLH_xx(<16 x i8>* %A) {
105entry:
106; CHECK: VMRGLH_xx:
107 %tmp = load <16 x i8>* %A
108 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 4, i32 5, i32 4, i32 5, i32 6, i32 7, i32 6, i32 7>
109; CHECK: vmrglh
110 store <16 x i8> %tmp2, <16 x i8>* %A
111 ret void
112}
113
114define void @VMRGHH_xy(<16 x i8>* %A, <16 x i8>* %B) {
115entry:
116; CHECK: VMRGHH_xy:
117 %tmp = load <16 x i8>* %A
118 %tmp2 = load <16 x i8>* %B
119 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 8, i32 9, i32 24, i32 25, i32 10, i32 11, i32 26, i32 27, i32 12, i32 13, i32 28, i32 29, i32 14, i32 15, i32 30, i32 31>
Bill Schmidtc9fa5dd2014-07-25 01:55:55 +0000120; CHECK: lvx [[REG1:[0-9]+]]
121; CHECK: lvx [[REG2:[0-9]+]]
122; CHECK: vmrghh [[REG3:[0-9]+]], [[REG2]], [[REG1]]
Bill Schmidtf910a062014-06-10 14:35:01 +0000123 store <16 x i8> %tmp3, <16 x i8>* %A
124 ret void
125}
126
127define void @VMRGHH_xx(<16 x i8>* %A) {
128entry:
129; CHECK: VMRGHH_xx:
130 %tmp = load <16 x i8>* %A
131 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 8, i32 9, i32 8, i32 9, i32 10, i32 11, i32 10, i32 11, i32 12, i32 13, i32 12, i32 13, i32 14, i32 15, i32 14, i32 15>
132; CHECK: vmrghh
133 store <16 x i8> %tmp2, <16 x i8>* %A
134 ret void
135}
136
137define void @VMRGLW_xy(<16 x i8>* %A, <16 x i8>* %B) {
138entry:
139; CHECK: VMRGLW_xy:
140 %tmp = load <16 x i8>* %A
141 %tmp2 = load <16 x i8>* %B
142 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 4, i32 5, i32 6, i32 7, i32 20, i32 21, i32 22, i32 23>
Bill Schmidtc9fa5dd2014-07-25 01:55:55 +0000143; CHECK: lvx [[REG1:[0-9]+]]
144; CHECK: lvx [[REG2:[0-9]+]]
145; CHECK: vmrglw [[REG3:[0-9]+]], [[REG2]], [[REG1]]
Bill Schmidtf910a062014-06-10 14:35:01 +0000146 store <16 x i8> %tmp3, <16 x i8>* %A
147 ret void
148}
149
150define void @VMRGLW_xx(<16 x i8>* %A) {
151entry:
152; CHECK: VMRGLW_xx:
153 %tmp = load <16 x i8>* %A
154 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>
155; CHECK: vmrglw
156 store <16 x i8> %tmp2, <16 x i8>* %A
157 ret void
158}
159
160define void @VMRGHW_xy(<16 x i8>* %A, <16 x i8>* %B) {
161entry:
162; CHECK: VMRGHW_xy:
163 %tmp = load <16 x i8>* %A
164 %tmp2 = load <16 x i8>* %B
165 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 24, i32 25, i32 26, i32 27, i32 12, i32 13, i32 14, i32 15, i32 28, i32 29, i32 30, i32 31>
Bill Schmidtc9fa5dd2014-07-25 01:55:55 +0000166; CHECK: lvx [[REG1:[0-9]+]]
167; CHECK: lvx [[REG2:[0-9]+]]
168; CHECK: vmrghw [[REG3:[0-9]+]], [[REG2]], [[REG1]]
Bill Schmidtf910a062014-06-10 14:35:01 +0000169 store <16 x i8> %tmp3, <16 x i8>* %A
170 ret void
171}
172
173define void @VMRGHW_xx(<16 x i8>* %A) {
174entry:
175; CHECK: VMRGHW_xx:
176 %tmp = load <16 x i8>* %A
177 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15>
178; CHECK: vmrghw
179 store <16 x i8> %tmp2, <16 x i8>* %A
180 ret void
181}
182
183define void @VSLDOI_xy(<16 x i8>* %A, <16 x i8>* %B) {
184entry:
185; CHECK: VSLDOI_xy:
186 %tmp = load <16 x i8>* %A
187 %tmp2 = load <16 x i8>* %B
188 %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> <i32 19, i32 18, i32 17, i32 16, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4>
189; CHECK: vsldoi
190 store <16 x i8> %tmp3, <16 x i8>* %A
191 ret void
192}
193
194define void @VSLDOI_xx(<16 x i8>* %A) {
195entry:
196; CHECK: VSLDOI_xx:
197 %tmp = load <16 x i8>* %A
198 %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4>
199; CHECK: vsldoi
200 store <16 x i8> %tmp2, <16 x i8>* %A
201 ret void
202}
203