1 ; RUN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
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>
10 ; CHECK: lxvd2x 0, 0, 3
12 ; CHECK: xxspltd 34, 0, 1
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>
22 ; CHECK: lxvd2x 0, 0, 3
23 ; CHECK: xxswapd 34, 0
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>
32 ; CHECK-LABEL: @test02
33 ; CHECK: lxvd2x 0, 0, 3
34 ; CHECK: lxvd2x 1, 0, 4
37 ; CHECK: xxmrgld 34, 1, 0
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>
46 ; CHECK-LABEL: @test03
47 ; CHECK: lxvd2x 0, 0, 3
48 ; CHECK: lxvd2x 1, 0, 4
51 ; CHECK: xxpermdi 34, 1, 0, 1
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>
60 ; CHECK-LABEL: @test10
61 ; CHECK: lxvd2x 0, 0, 3
63 ; CHECK: xxswapd 34, 0
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>
72 ; CHECK-LABEL: @test11
73 ; CHECK: lxvd2x 0, 0, 3
75 ; CHECK: xxspltd 34, 0, 0
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>
84 ; CHECK-LABEL: @test12
85 ; CHECK: lxvd2x 0, 0, 3
86 ; CHECK: lxvd2x 1, 0, 4
89 ; CHECK: xxpermdi 34, 1, 0, 2
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>
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
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>
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
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>
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
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>
140 ; CHECK-LABEL: @test22
141 ; CHECK: lxvd2x 0, 0, 4
142 ; CHECK: xxswapd 0, 0
143 ; CHECK: xxspltd 34, 0, 1
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>
152 ; CHECK-LABEL: @test23
153 ; CHECK: lxvd2x 0, 0, 4
154 ; CHECK: xxswapd 34, 0
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>
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
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>
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
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>
191 ; CHECK-LABEL: @test32
192 ; CHECK: lxvd2x 0, 0, 4
193 ; CHECK: xxswapd 0, 0
194 ; CHECK: xxswapd 34, 0
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>
203 ; CHECK-LABEL: @test33
204 ; CHECK: lxvd2x 0, 0, 4
205 ; CHECK: xxswapd 0, 0
206 ; CHECK: xxspltd 34, 0, 0