blob: b3682b96f1301dc02adae296657a8a81c817fab0 [file] [log] [blame]
Bill Schmidt30144352014-12-09 16:52:29 +00001; Note: This test is disabled until VSX is enabled for LE, as otherwise
2; we don't get the correct code gen.
3; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unknown-linux-gnu < %s
4; FIXME: Remove this and all above lines when VSX is enabled for LE.
5
6; R;UN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
7
8define <2 x double> @test00(<2 x double>* %p1, <2 x double>* %p2) {
9 %v1 = load <2 x double>* %p1
10 %v2 = load <2 x double>* %p2
11 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 0>
12 ret <2 x double> %v3
13
14; CHECK-LABEL: test00
15; CHECK: lxvd2x 0, 0, 3
16; CHECK: xxpermdi 0, 0, 0, 2
17; CHECK: xxpermdi 34, 0, 0, 3
18}
19
20define <2 x double> @test01(<2 x double>* %p1, <2 x double>* %p2) {
21 %v1 = load <2 x double>* %p1
22 %v2 = load <2 x double>* %p2
23 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 1>
24 ret <2 x double> %v3
25
26; CHECK-LABEL: test01
27; CHECK: lxvd2x 0, 0, 3
28; CHECK: xxpermdi 34, 0, 0, 2
29}
30
31define <2 x double> @test02(<2 x double>* %p1, <2 x double>* %p2) {
32 %v1 = load <2 x double>* %p1
33 %v2 = load <2 x double>* %p2
34 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 2>
35 ret <2 x double> %v3
36
37; CHECK-LABEL: @test02
38; CHECK: lxvd2x 0, 0, 3
39; CHECK: lxvd2x 1, 0, 4
40; CHECK: xxpermdi 0, 0, 0, 2
41; CHECK: xxpermdi 1, 1, 1, 2
42; CHECK: xxpermdi 34, 1, 0, 3
43}
44
45define <2 x double> @test03(<2 x double>* %p1, <2 x double>* %p2) {
46 %v1 = load <2 x double>* %p1
47 %v2 = load <2 x double>* %p2
48 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 3>
49 ret <2 x double> %v3
50
51; CHECK-LABEL: @test03
52; CHECK: lxvd2x 0, 0, 3
53; CHECK: lxvd2x 1, 0, 4
54; CHECK: xxpermdi 0, 0, 0, 2
55; CHECK: xxpermdi 1, 1, 1, 2
56; CHECK: xxpermdi 34, 1, 0, 1
57}
58
59define <2 x double> @test10(<2 x double>* %p1, <2 x double>* %p2) {
60 %v1 = load <2 x double>* %p1
61 %v2 = load <2 x double>* %p2
62 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 0>
63 ret <2 x double> %v3
64
65; CHECK-LABEL: @test10
66; CHECK: lxvd2x 0, 0, 3
67; CHECK: xxpermdi 0, 0, 0, 2
68; CHECK: xxpermdi 34, 0, 0, 2
69}
70
71define <2 x double> @test11(<2 x double>* %p1, <2 x double>* %p2) {
72 %v1 = load <2 x double>* %p1
73 %v2 = load <2 x double>* %p2
74 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 1>
75 ret <2 x double> %v3
76
77; CHECK-LABEL: @test11
78; CHECK: lxvd2x 0, 0, 3
79; CHECK: xxpermdi 0, 0, 0, 2
80; CHECK: xxpermdi 34, 0, 0, 0
81}
82
83define <2 x double> @test12(<2 x double>* %p1, <2 x double>* %p2) {
84 %v1 = load <2 x double>* %p1
85 %v2 = load <2 x double>* %p2
86 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 2>
87 ret <2 x double> %v3
88
89; CHECK-LABEL: @test12
90; CHECK: lxvd2x 0, 0, 3
91; CHECK: lxvd2x 1, 0, 4
92; CHECK: xxpermdi 0, 0, 0, 2
93; CHECK: xxpermdi 1, 1, 1, 2
94; CHECK: xxpermdi 34, 1, 0, 2
95}
96
97define <2 x double> @test13(<2 x double>* %p1, <2 x double>* %p2) {
98 %v1 = load <2 x double>* %p1
99 %v2 = load <2 x double>* %p2
100 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 3>
101 ret <2 x double> %v3
102
103; CHECK-LABEL: @test13
104; CHECK: lxvd2x 0, 0, 3
105; CHECK: lxvd2x 1, 0, 4
106; CHECK: xxpermdi 0, 0, 0, 2
107; CHECK: xxpermdi 1, 1, 1, 2
108; CHECK: xxpermdi 34, 1, 0, 0
109}
110
111define <2 x double> @test20(<2 x double>* %p1, <2 x double>* %p2) {
112 %v1 = load <2 x double>* %p1
113 %v2 = load <2 x double>* %p2
114 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 0>
115 ret <2 x double> %v3
116
117; CHECK-LABEL: @test20
118; CHECK: lxvd2x 0, 0, 3
119; CHECK: lxvd2x 1, 0, 4
120; CHECK: xxpermdi 0, 0, 0, 2
121; CHECK: xxpermdi 1, 1, 1, 2
122; CHECK: xxpermdi 34, 0, 1, 3
123}
124
125define <2 x double> @test21(<2 x double>* %p1, <2 x double>* %p2) {
126 %v1 = load <2 x double>* %p1
127 %v2 = load <2 x double>* %p2
128 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 1>
129 ret <2 x double> %v3
130
131; CHECK-LABEL: @test21
132; CHECK: lxvd2x 0, 0, 3
133; CHECK: lxvd2x 1, 0, 4
134; CHECK: xxpermdi 0, 0, 0, 2
135; CHECK: xxpermdi 1, 1, 1, 2
136; CHECK: xxpermdi 34, 0, 1, 1
137}
138
139define <2 x double> @test22(<2 x double>* %p1, <2 x double>* %p2) {
140 %v1 = load <2 x double>* %p1
141 %v2 = load <2 x double>* %p2
142 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 2>
143 ret <2 x double> %v3
144
145; CHECK-LABEL: @test22
146; CHECK: lxvd2x 0, 0, 4
147; CHECK: xxpermdi 0, 0, 0, 2
148; CHECK: xxpermdi 34, 0, 0, 3
149}
150
151define <2 x double> @test23(<2 x double>* %p1, <2 x double>* %p2) {
152 %v1 = load <2 x double>* %p1
153 %v2 = load <2 x double>* %p2
154 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 3>
155 ret <2 x double> %v3
156
157; CHECK-LABEL: @test23
158; CHECK: lxvd2x 0, 0, 4
159; CHECK: xxpermdi 34, 0, 0, 2
160}
161
162define <2 x double> @test30(<2 x double>* %p1, <2 x double>* %p2) {
163 %v1 = load <2 x double>* %p1
164 %v2 = load <2 x double>* %p2
165 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 0>
166 ret <2 x double> %v3
167
168; CHECK-LABEL: @test30
169; CHECK: lxvd2x 0, 0, 3
170; CHECK: lxvd2x 1, 0, 4
171; CHECK: xxpermdi 0, 0, 0, 2
172; CHECK: xxpermdi 1, 1, 1, 2
173; CHECK: xxpermdi 34, 0, 1, 2
174}
175
176define <2 x double> @test31(<2 x double>* %p1, <2 x double>* %p2) {
177 %v1 = load <2 x double>* %p1
178 %v2 = load <2 x double>* %p2
179 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 1>
180 ret <2 x double> %v3
181
182; CHECK-LABEL: @test31
183; CHECK: lxvd2x 0, 0, 3
184; CHECK: lxvd2x 1, 0, 4
185; CHECK: xxpermdi 0, 0, 0, 2
186; CHECK: xxpermdi 1, 1, 1, 2
187; CHECK: xxpermdi 34, 0, 1, 0
188}
189
190define <2 x double> @test32(<2 x double>* %p1, <2 x double>* %p2) {
191 %v1 = load <2 x double>* %p1
192 %v2 = load <2 x double>* %p2
193 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 2>
194 ret <2 x double> %v3
195
196; CHECK-LABEL: @test32
197; CHECK: lxvd2x 0, 0, 4
198; CHECK: xxpermdi 0, 0, 0, 2
199; CHECK: xxpermdi 34, 0, 0, 2
200}
201
202define <2 x double> @test33(<2 x double>* %p1, <2 x double>* %p2) {
203 %v1 = load <2 x double>* %p1
204 %v2 = load <2 x double>* %p2
205 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 3>
206 ret <2 x double> %v3
207
208; CHECK-LABEL: @test33
209; CHECK: lxvd2x 0, 0, 4
210; CHECK: xxpermdi 0, 0, 0, 2
211; CHECK: xxpermdi 34, 0, 0, 0
212}