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: xxspltd 34, 0, 0
14 define <2 x double> @test01(<2 x double>* %p1, <2 x double>* %p2) {
15 %v1 = load <2 x double>, <2 x double>* %p1
16 %v2 = load <2 x double>, <2 x double>* %p2
17 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 1>
21 ; CHECK: lxvd2x 0, 0, 3
22 ; CHECK: xxswapd 34, 0
25 define <2 x double> @test02(<2 x double>* %p1, <2 x double>* %p2) {
26 %v1 = load <2 x double>, <2 x double>* %p1
27 %v2 = load <2 x double>, <2 x double>* %p2
28 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 2>
31 ; CHECK-LABEL: @test02
32 ; CHECK: lxvd2x 0, 0, 3
33 ; CHECK: lxvd2x 1, 0, 4
36 ; CHECK: xxmrgld 34, 1, 0
39 define <2 x double> @test03(<2 x double>* %p1, <2 x double>* %p2) {
40 %v1 = load <2 x double>, <2 x double>* %p1
41 %v2 = load <2 x double>, <2 x double>* %p2
42 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 3>
45 ; CHECK-LABEL: @test03
46 ; CHECK: lxvd2x 0, 0, 3
47 ; CHECK: lxvd2x 1, 0, 4
50 ; CHECK: xxpermdi 34, 1, 0, 1
53 define <2 x double> @test10(<2 x double>* %p1, <2 x double>* %p2) {
54 %v1 = load <2 x double>, <2 x double>* %p1
55 %v2 = load <2 x double>, <2 x double>* %p2
56 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 0>
59 ; CHECK-LABEL: @test10
60 ; CHECK: lxvd2x 34, 0, 3
63 define <2 x double> @test11(<2 x double>* %p1, <2 x double>* %p2) {
64 %v1 = load <2 x double>, <2 x double>* %p1
65 %v2 = load <2 x double>, <2 x double>* %p2
66 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 1>
69 ; CHECK-LABEL: @test11
70 ; CHECK: lxvd2x 0, 0, 3
71 ; CHECK: xxspltd 34, 0, 1
74 define <2 x double> @test12(<2 x double>* %p1, <2 x double>* %p2) {
75 %v1 = load <2 x double>, <2 x double>* %p1
76 %v2 = load <2 x double>, <2 x double>* %p2
77 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 2>
80 ; CHECK-LABEL: @test12
81 ; CHECK: lxvd2x 0, 0, 3
82 ; CHECK: lxvd2x 1, 0, 4
85 ; CHECK: xxpermdi 34, 1, 0, 2
88 define <2 x double> @test13(<2 x double>* %p1, <2 x double>* %p2) {
89 %v1 = load <2 x double>, <2 x double>* %p1
90 %v2 = load <2 x double>, <2 x double>* %p2
91 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 3>
94 ; CHECK-LABEL: @test13
95 ; CHECK: lxvd2x 0, 0, 3
96 ; CHECK: lxvd2x 1, 0, 4
99 ; CHECK: xxmrghd 34, 1, 0
102 define <2 x double> @test20(<2 x double>* %p1, <2 x double>* %p2) {
103 %v1 = load <2 x double>, <2 x double>* %p1
104 %v2 = load <2 x double>, <2 x double>* %p2
105 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 0>
108 ; CHECK-LABEL: @test20
109 ; CHECK: lxvd2x 0, 0, 3
110 ; CHECK: lxvd2x 1, 0, 4
111 ; CHECK: xxswapd 0, 0
112 ; CHECK: xxswapd 1, 1
113 ; CHECK: xxmrgld 34, 0, 1
116 define <2 x double> @test21(<2 x double>* %p1, <2 x double>* %p2) {
117 %v1 = load <2 x double>, <2 x double>* %p1
118 %v2 = load <2 x double>, <2 x double>* %p2
119 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 1>
122 ; CHECK-LABEL: @test21
123 ; CHECK: lxvd2x 0, 0, 3
124 ; CHECK: lxvd2x 1, 0, 4
125 ; CHECK: xxswapd 0, 0
126 ; CHECK: xxswapd 1, 1
127 ; CHECK: xxpermdi 34, 0, 1, 1
130 define <2 x double> @test22(<2 x double>* %p1, <2 x double>* %p2) {
131 %v1 = load <2 x double>, <2 x double>* %p1
132 %v2 = load <2 x double>, <2 x double>* %p2
133 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 2>
136 ; CHECK-LABEL: @test22
137 ; CHECK: lxvd2x 0, 0, 4
138 ; CHECK: xxspltd 34, 0, 0
141 define <2 x double> @test23(<2 x double>* %p1, <2 x double>* %p2) {
142 %v1 = load <2 x double>, <2 x double>* %p1
143 %v2 = load <2 x double>, <2 x double>* %p2
144 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 3>
147 ; CHECK-LABEL: @test23
148 ; CHECK: lxvd2x 0, 0, 4
149 ; CHECK: xxswapd 34, 0
152 define <2 x double> @test30(<2 x double>* %p1, <2 x double>* %p2) {
153 %v1 = load <2 x double>, <2 x double>* %p1
154 %v2 = load <2 x double>, <2 x double>* %p2
155 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 0>
158 ; CHECK-LABEL: @test30
159 ; CHECK: lxvd2x 0, 0, 3
160 ; CHECK: lxvd2x 1, 0, 4
161 ; CHECK: xxswapd 0, 0
162 ; CHECK: xxswapd 1, 1
163 ; CHECK: xxpermdi 34, 0, 1, 2
166 define <2 x double> @test31(<2 x double>* %p1, <2 x double>* %p2) {
167 %v1 = load <2 x double>, <2 x double>* %p1
168 %v2 = load <2 x double>, <2 x double>* %p2
169 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 1>
172 ; CHECK-LABEL: @test31
173 ; CHECK: lxvd2x 0, 0, 3
174 ; CHECK: lxvd2x 1, 0, 4
175 ; CHECK: xxswapd 0, 0
176 ; CHECK: xxswapd 1, 1
177 ; CHECK: xxmrghd 34, 0, 1
180 define <2 x double> @test32(<2 x double>* %p1, <2 x double>* %p2) {
181 %v1 = load <2 x double>, <2 x double>* %p1
182 %v2 = load <2 x double>, <2 x double>* %p2
183 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 2>
186 ; CHECK-LABEL: @test32
187 ; CHECK: lxvd2x 34, 0, 4
190 define <2 x double> @test33(<2 x double>* %p1, <2 x double>* %p2) {
191 %v1 = load <2 x double>, <2 x double>* %p1
192 %v2 = load <2 x double>, <2 x double>* %p2
193 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 3>
196 ; CHECK-LABEL: @test33
197 ; CHECK: lxvd2x 0, 0, 4
198 ; CHECK: xxspltd 34, 0, 1