blob: 6bfde935f1d655e8ed2e06ed0f3d0eabd95cf8a7 [file] [log] [blame]
Bill Schmidtefe9ce22014-12-09 16:59:57 +00001; RUN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
Bill Schmidt30144352014-12-09 16:52:29 +00002
3define <2 x double> @test00(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +00004 %v1 = load <2 x double>, <2 x double>* %p1
5 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +00006 %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: xxpermdi 0, 0, 0, 2
12; CHECK: xxpermdi 34, 0, 0, 3
13}
14
15define <2 x double> @test01(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +000016 %v1 = load <2 x double>, <2 x double>* %p1
17 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +000018 %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: xxpermdi 34, 0, 0, 2
24}
25
26define <2 x double> @test02(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +000027 %v1 = load <2 x double>, <2 x double>* %p1
28 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +000029 %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: xxpermdi 0, 0, 0, 2
36; CHECK: xxpermdi 1, 1, 1, 2
37; CHECK: xxpermdi 34, 1, 0, 3
38}
39
40define <2 x double> @test03(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +000041 %v1 = load <2 x double>, <2 x double>* %p1
42 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +000043 %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: xxpermdi 0, 0, 0, 2
50; CHECK: xxpermdi 1, 1, 1, 2
51; CHECK: xxpermdi 34, 1, 0, 1
52}
53
54define <2 x double> @test10(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +000055 %v1 = load <2 x double>, <2 x double>* %p1
56 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +000057 %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: xxpermdi 0, 0, 0, 2
63; CHECK: xxpermdi 34, 0, 0, 2
64}
65
66define <2 x double> @test11(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +000067 %v1 = load <2 x double>, <2 x double>* %p1
68 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +000069 %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: xxpermdi 0, 0, 0, 2
75; CHECK: xxpermdi 34, 0, 0, 0
76}
77
78define <2 x double> @test12(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +000079 %v1 = load <2 x double>, <2 x double>* %p1
80 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +000081 %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: xxpermdi 0, 0, 0, 2
88; CHECK: xxpermdi 1, 1, 1, 2
89; CHECK: xxpermdi 34, 1, 0, 2
90}
91
92define <2 x double> @test13(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +000093 %v1 = load <2 x double>, <2 x double>* %p1
94 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +000095 %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: xxpermdi 0, 0, 0, 2
102; CHECK: xxpermdi 1, 1, 1, 2
103; CHECK: xxpermdi 34, 1, 0, 0
104}
105
106define <2 x double> @test20(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +0000107 %v1 = load <2 x double>, <2 x double>* %p1
108 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +0000109 %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: xxpermdi 0, 0, 0, 2
116; CHECK: xxpermdi 1, 1, 1, 2
117; CHECK: xxpermdi 34, 0, 1, 3
118}
119
120define <2 x double> @test21(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +0000121 %v1 = load <2 x double>, <2 x double>* %p1
122 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +0000123 %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: xxpermdi 0, 0, 0, 2
130; CHECK: xxpermdi 1, 1, 1, 2
131; CHECK: xxpermdi 34, 0, 1, 1
132}
133
134define <2 x double> @test22(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +0000135 %v1 = load <2 x double>, <2 x double>* %p1
136 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +0000137 %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: xxpermdi 0, 0, 0, 2
143; CHECK: xxpermdi 34, 0, 0, 3
144}
145
146define <2 x double> @test23(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +0000147 %v1 = load <2 x double>, <2 x double>* %p1
148 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +0000149 %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: xxpermdi 34, 0, 0, 2
155}
156
157define <2 x double> @test30(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +0000158 %v1 = load <2 x double>, <2 x double>* %p1
159 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +0000160 %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: xxpermdi 0, 0, 0, 2
167; CHECK: xxpermdi 1, 1, 1, 2
168; CHECK: xxpermdi 34, 0, 1, 2
169}
170
171define <2 x double> @test31(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +0000172 %v1 = load <2 x double>, <2 x double>* %p1
173 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +0000174 %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: xxpermdi 0, 0, 0, 2
181; CHECK: xxpermdi 1, 1, 1, 2
182; CHECK: xxpermdi 34, 0, 1, 0
183}
184
185define <2 x double> @test32(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +0000186 %v1 = load <2 x double>, <2 x double>* %p1
187 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +0000188 %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: xxpermdi 0, 0, 0, 2
194; CHECK: xxpermdi 34, 0, 0, 2
195}
196
197define <2 x double> @test33(<2 x double>* %p1, <2 x double>* %p2) {
David Blaikiea79ac142015-02-27 21:17:42 +0000198 %v1 = load <2 x double>, <2 x double>* %p1
199 %v2 = load <2 x double>, <2 x double>* %p2
Bill Schmidt30144352014-12-09 16:52:29 +0000200 %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: xxpermdi 0, 0, 0, 2
206; CHECK: xxpermdi 34, 0, 0, 0
207}