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
11 ; CHECK: xxpermdi 0, 0, 0, 2
12 ; CHECK: xxpermdi 34, 0, 0, 3
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: xxpermdi 34, 0, 0, 2
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
35 ; CHECK: xxpermdi 0, 0, 0, 2
36 ; CHECK: xxpermdi 1, 1, 1, 2
37 ; CHECK: xxpermdi 34, 1, 0, 3
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
49 ; CHECK: xxpermdi 0, 0, 0, 2
50 ; CHECK: xxpermdi 1, 1, 1, 2
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
62 ; CHECK: xxpermdi 0, 0, 0, 2
63 ; CHECK: xxpermdi 34, 0, 0, 2
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
74 ; CHECK: xxpermdi 0, 0, 0, 2
75 ; CHECK: xxpermdi 34, 0, 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
87 ; CHECK: xxpermdi 0, 0, 0, 2
88 ; CHECK: xxpermdi 1, 1, 1, 2
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: xxpermdi 0, 0, 0, 2
102 ; CHECK: xxpermdi 1, 1, 1, 2
103 ; CHECK: xxpermdi 34, 1, 0, 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: xxpermdi 0, 0, 0, 2
116 ; CHECK: xxpermdi 1, 1, 1, 2
117 ; CHECK: xxpermdi 34, 0, 1, 3
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: xxpermdi 0, 0, 0, 2
130 ; CHECK: xxpermdi 1, 1, 1, 2
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: xxpermdi 0, 0, 0, 2
143 ; CHECK: xxpermdi 34, 0, 0, 3
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: xxpermdi 34, 0, 0, 2
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: xxpermdi 0, 0, 0, 2
167 ; CHECK: xxpermdi 1, 1, 1, 2
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: xxpermdi 0, 0, 0, 2
181 ; CHECK: xxpermdi 1, 1, 1, 2
182 ; CHECK: xxpermdi 34, 0, 1, 0
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: xxpermdi 0, 0, 0, 2
194 ; CHECK: xxpermdi 34, 0, 0, 2
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: xxpermdi 0, 0, 0, 2
206 ; CHECK: xxpermdi 34, 0, 0, 0