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