xref: /aosp_15_r20/external/llvm/test/Analysis/CostModel/X86/alternate-shuffle-cost.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-ssse3 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSE2
2*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,+sse3,+ssse3 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSSE3
3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSE41
4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7-avx -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=AVX
5*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=core-avx2 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=AVX2
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; Verify the cost model for alternate shuffles.
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; shufflevector instructions with illegal 64-bit vector types.
11*9880d681SAndroid Build Coastguard Worker; 64-bit packed integer vectors (v2i32) are promoted to type v2i64.
12*9880d681SAndroid Build Coastguard Worker; 64-bit packed float vectors (v2f32) are widened to type v4f32.
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_v2i32(<2 x i32> %a, <2 x i32> %b) {
15*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 3>
16*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %1
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2i32':
19*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
20*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
21*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
22*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
23*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_v2f32(<2 x float> %a, <2 x float> %b) {
26*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 3>
27*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %1
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2f32':
30*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
31*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
32*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
33*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
34*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_v2i32_2(<2 x i32> %a, <2 x i32> %b) {
37*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 2, i32 1>
38*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %1
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2i32_2':
41*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
42*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
43*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
44*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
45*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_v2f32_2(<2 x float> %a, <2 x float> %b) {
48*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 2, i32 1>
49*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %1
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2f32_2':
52*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
53*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
54*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
55*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
56*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; Test shuffles on packed vectors of two elements.
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_v2i64(<2 x i64> %a, <2 x i64> %b) {
62*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 3>
63*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %1
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2i64':
66*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
67*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
68*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
69*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
70*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_v2f64(<2 x double> %a, <2 x double> %b) {
73*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 3>
74*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %1
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2f64':
77*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
78*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
79*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
80*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
81*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_v2i64_2(<2 x i64> %a, <2 x i64> %b) {
85*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 2, i32 1>
86*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %1
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2i64_2':
89*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
90*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
91*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
92*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
93*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_v2f64_2(<2 x double> %a, <2 x double> %b) {
97*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 2, i32 1>
98*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %1
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2f64_2':
101*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
102*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
103*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
104*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
105*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker; Test shuffles on packed vectors of four elements.
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_v4i32(<4 x i32> %a, <4 x i32> %b) {
110*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
111*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %1
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4i32':
114*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
115*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
116*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
117*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
118*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_v4i32_2(<4 x i32> %a, <4 x i32> %b) {
122*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
123*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %1
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4i32_2':
126*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
127*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
128*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
129*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
130*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_v4f32(<4 x float> %a, <4 x float> %b) {
134*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
135*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4f32':
138*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
139*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
140*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
141*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
142*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_v4f32_2(<4 x float> %a, <4 x float> %b) {
146*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
147*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4f32_2':
150*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
151*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
152*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
153*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
154*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_v4i64(<4 x i64> %a, <4 x i64> %b) {
157*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
158*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %1
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4i64':
161*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
162*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
163*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
164*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
165*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_v4i64_2(<4 x i64> %a, <4 x i64> %b) {
169*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
170*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %1
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4i64_2':
173*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
174*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
175*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
176*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
177*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_v4f64(<4 x double> %a, <4 x double> %b) {
181*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
182*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %1
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4f64':
185*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
186*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
187*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
188*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
189*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_v4f64_2(<4 x double> %a, <4 x double> %b) {
193*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
194*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %1
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4f64_2':
197*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
198*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
199*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
200*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
201*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker; Test shuffles on packed vectors of eight elements.
205*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_v8i16(<8 x i16> %a, <8 x i16> %b) {
206*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
207*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %1
208*9880d681SAndroid Build Coastguard Worker}
209*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8i16':
210*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 8 for instruction:   %1 = shufflevector
211*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
212*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
213*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
214*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_v8i16_2(<8 x i16> %a, <8 x i16> %b) {
218*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
219*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %1
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8i16_2':
222*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 8 for instruction:   %1 = shufflevector
223*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
224*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
225*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
226*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_v8i32(<8 x i32> %a, <8 x i32> %b) {
230*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
231*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %1
232*9880d681SAndroid Build Coastguard Worker}
233*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8i32':
234*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 4 for instruction:   %1 = shufflevector
235*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 4 for instruction:   %1 = shufflevector
236*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
237*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
238*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_v8i32_2(<8 x i32> %a, <8 x i32> %b) {
242*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
243*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %1
244*9880d681SAndroid Build Coastguard Worker}
245*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8i32_2':
246*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 4 for instruction:   %1 = shufflevector
247*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 4 for instruction:   %1 = shufflevector
248*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
249*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
250*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_v8f32(<8 x float> %a, <8 x float> %b) {
254*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
255*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %1
256*9880d681SAndroid Build Coastguard Worker}
257*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8f32':
258*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 4 for instruction:   %1 = shufflevector
259*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 4 for instruction:   %1 = shufflevector
260*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
261*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
262*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
263*9880d681SAndroid Build Coastguard Worker
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_v8f32_2(<8 x float> %a, <8 x float> %b) {
266*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
267*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %1
268*9880d681SAndroid Build Coastguard Worker}
269*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8f32_2':
270*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 4 for instruction:   %1 = shufflevector
271*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 4 for instruction:   %1 = shufflevector
272*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
273*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
274*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Worker; Test shuffles on packed vectors of sixteen elements.
278*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_v16i8(<16 x i8> %a, <16 x i8> %b) {
279*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
280*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %1
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v16i8':
283*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 48 for instruction:   %1 = shufflevector
284*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
285*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
286*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
287*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
288*9880d681SAndroid Build Coastguard Worker
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_v16i8_2(<16 x i8> %a, <16 x i8> %b) {
291*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>
292*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %1
293*9880d681SAndroid Build Coastguard Worker}
294*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v16i8_2':
295*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 48 for instruction:   %1 = shufflevector
296*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
297*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
298*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
299*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 3 for instruction:   %1 = shufflevector
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Worker
302*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_v16i16(<16 x i16> %a, <16 x i16> %b) {
303*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
304*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %1
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v16i16':
307*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 16 for instruction:   %1 = shufflevector
308*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 6 for instruction:   %1 = shufflevector
309*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
310*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 5 for instruction:   %1 = shufflevector
311*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_v16i16_2(<16 x i16> %a, <16 x i16> %b) {
315*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>
316*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %1
317*9880d681SAndroid Build Coastguard Worker}
318*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v16i16_2':
319*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 16 for instruction:   %1 = shufflevector
320*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 6 for instruction:   %1 = shufflevector
321*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction:   %1 = shufflevector
322*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 5 for instruction:   %1 = shufflevector
323*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction:   %1 = shufflevector
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_v32i8(<32 x i8> %a, <32 x i8> %b) {
326*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 33, i32 2, i32 35, i32 4, i32 37, i32 6, i32 39, i32 8, i32 41, i32 10, i32 43, i32 12, i32 45, i32 14, i32 47, i32 16, i32 49, i32 18, i32 51, i32 20, i32 53, i32 22, i32 55, i32 24, i32 57, i32 26, i32 59, i32 28, i32 61, i32 30, i32 63>
327*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %1
328*9880d681SAndroid Build Coastguard Worker}
329*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v32i8':
330*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 96 for instruction:   %1 = shufflevector
331*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 6 for instruction:   %1 = shufflevector
332*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 6 for instruction:   %1 = shufflevector
333*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 9 for instruction:   %1 = shufflevector
334*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 9 for instruction:   %1 = shufflevector
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_v32i8_2(<32 x i8> %a, <32 x i8> %b) {
338*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 32, i32 1, i32 34, i32 3, i32 36, i32 5, i32 38, i32 7, i32 40, i32 9, i32 42, i32 11, i32 44, i32 13, i32 46, i32 15, i32 48, i32 17, i32 50, i32 19, i32 52, i32 21, i32 54, i32 23, i32 56, i32 25, i32 58, i32 27, i32 60, i32 29, i32 62, i32 31>
339*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %1
340*9880d681SAndroid Build Coastguard Worker}
341*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v32i8_2':
342*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 96 for instruction:   %1 = shufflevector
343*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 6 for instruction:   %1 = shufflevector
344*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 6 for instruction:   %1 = shufflevector
345*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 9 for instruction:   %1 = shufflevector
346*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 9 for instruction:   %1 = shufflevector
347*9880d681SAndroid Build Coastguard Worker
348