blob: dcfa0e78886769527bc5fa691169040e6c4db8f1 [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
Hal Finkel7c5cb062015-04-23 18:30:38 +000011; CHECK: xxswapd 0, 0
12; CHECK: xxspltd 34, 0, 1
Bill Schmidt30144352014-12-09 16:52:29 +000013}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +000023; CHECK: xxswapd 34, 0
Bill Schmidt30144352014-12-09 16:52:29 +000024}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +000035; CHECK: xxswapd 0, 0
36; CHECK: xxswapd 1, 1
37; CHECK: xxmrgld 34, 1, 0
Bill Schmidt30144352014-12-09 16:52:29 +000038}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +000049; CHECK: xxswapd 0, 0
50; CHECK: xxswapd 1, 1
Bill Schmidt30144352014-12-09 16:52:29 +000051; 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
Hal Finkel7c5cb062015-04-23 18:30:38 +000062; CHECK: xxswapd 0, 0
63; CHECK: xxswapd 34, 0
Bill Schmidt30144352014-12-09 16:52:29 +000064}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +000074; CHECK: xxswapd 0, 0
75; CHECK: xxspltd 34, 0, 0
Bill Schmidt30144352014-12-09 16:52:29 +000076}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +000087; CHECK: xxswapd 0, 0
88; CHECK: xxswapd 1, 1
Bill Schmidt30144352014-12-09 16:52:29 +000089; 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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000101; CHECK: xxswapd 0, 0
102; CHECK: xxswapd 1, 1
103; CHECK: xxmrghd 34, 1, 0
Bill Schmidt30144352014-12-09 16:52:29 +0000104}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000115; CHECK: xxswapd 0, 0
116; CHECK: xxswapd 1, 1
117; CHECK: xxmrgld 34, 0, 1
Bill Schmidt30144352014-12-09 16:52:29 +0000118}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000129; CHECK: xxswapd 0, 0
130; CHECK: xxswapd 1, 1
Bill Schmidt30144352014-12-09 16:52:29 +0000131; 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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000142; CHECK: xxswapd 0, 0
143; CHECK: xxspltd 34, 0, 1
Bill Schmidt30144352014-12-09 16:52:29 +0000144}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000154; CHECK: xxswapd 34, 0
Bill Schmidt30144352014-12-09 16:52:29 +0000155}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000166; CHECK: xxswapd 0, 0
167; CHECK: xxswapd 1, 1
Bill Schmidt30144352014-12-09 16:52:29 +0000168; 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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000180; CHECK: xxswapd 0, 0
181; CHECK: xxswapd 1, 1
182; CHECK: xxmrghd 34, 0, 1
Bill Schmidt30144352014-12-09 16:52:29 +0000183}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000193; CHECK: xxswapd 0, 0
194; CHECK: xxswapd 34, 0
Bill Schmidt30144352014-12-09 16:52:29 +0000195}
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
Hal Finkel7c5cb062015-04-23 18:30:38 +0000205; CHECK: xxswapd 0, 0
206; CHECK: xxspltd 34, 0, 0
Bill Schmidt30144352014-12-09 16:52:29 +0000207}