xref: /aosp_15_r20/external/llvm/test/Analysis/CostModel/X86/sse-itoi.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+sse2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE2 %s
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+sse4.1 -cost-model -analyze < %s | FileCheck --check-prefix=SSE41 %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine void @zext_v4i8_to_v4i64(<4 x i8>* %a) {
5*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v4i8_to_v4i64
6*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 4 {{.*}} zext
7*9880d681SAndroid Build Coastguard Worker;
8*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v4i8_to_v4i64
9*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} zext
10*9880d681SAndroid Build Coastguard Worker;
11*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i8>, <4 x i8>* %a
12*9880d681SAndroid Build Coastguard Worker  %2 = zext <4 x i8> %1 to <4 x i64>
13*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %2, <4 x i64>* undef, align 4
14*9880d681SAndroid Build Coastguard Worker  ret void
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine void @sext_v4i8_to_v4i64(<4 x i8>* %a) {
18*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v4i8_to_v4i64
19*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 8 {{.*}} sext
20*9880d681SAndroid Build Coastguard Worker;
21*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v4i8_to_v4i64
22*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} sext
23*9880d681SAndroid Build Coastguard Worker;
24*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i8>, <4 x i8>* %a
25*9880d681SAndroid Build Coastguard Worker  %2 = sext <4 x i8> %1 to <4 x i64>
26*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %2, <4 x i64>* undef, align 4
27*9880d681SAndroid Build Coastguard Worker  ret void
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine void @zext_v4i16_to_v4i64(<4 x i16>* %a) {
31*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v4i16_to_v4i64
32*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 3 {{.*}} zext
33*9880d681SAndroid Build Coastguard Worker;
34*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v4i16_to_v4i64
35*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} zext
36*9880d681SAndroid Build Coastguard Worker;
37*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i16>, <4 x i16>* %a
38*9880d681SAndroid Build Coastguard Worker  %2 = zext <4 x i16> %1 to <4 x i64>
39*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %2, <4 x i64>* undef, align 4
40*9880d681SAndroid Build Coastguard Worker  ret void
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine void @sext_v4i16_to_v4i64(<4 x i16>* %a) {
44*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v4i16_to_v4i64
45*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 10 {{.*}} sext
46*9880d681SAndroid Build Coastguard Worker;
47*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v4i16_to_v4i64
48*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} sext
49*9880d681SAndroid Build Coastguard Worker;
50*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i16>, <4 x i16>* %a
51*9880d681SAndroid Build Coastguard Worker  %2 = sext <4 x i16> %1 to <4 x i64>
52*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %2, <4 x i64>* undef, align 4
53*9880d681SAndroid Build Coastguard Worker  ret void
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdefine void @zext_v4i32_to_v4i64(<4 x i32>* %a) {
58*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v4i32_to_v4i64
59*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 3 {{.*}} zext
60*9880d681SAndroid Build Coastguard Worker;
61*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v4i32_to_v4i64
62*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} zext
63*9880d681SAndroid Build Coastguard Worker;
64*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
65*9880d681SAndroid Build Coastguard Worker  %2 = zext <4 x i32> %1 to <4 x i64>
66*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %2, <4 x i64>* undef, align 4
67*9880d681SAndroid Build Coastguard Worker  ret void
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerdefine void @sext_v4i32_to_v4i64(<4 x i32>* %a) {
71*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v4i32_to_v4i64
72*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 5 {{.*}} sext
73*9880d681SAndroid Build Coastguard Worker;
74*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v4i32_to_v4i64
75*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} sext
76*9880d681SAndroid Build Coastguard Worker;
77*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
78*9880d681SAndroid Build Coastguard Worker  %2 = sext <4 x i32> %1 to <4 x i64>
79*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %2, <4 x i64>* undef, align 4
80*9880d681SAndroid Build Coastguard Worker  ret void
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerdefine void @zext_v16i16_to_v16i32(<16 x i16>* %a) {
84*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v16i16_to_v16i32
85*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 6 {{.*}} zext
86*9880d681SAndroid Build Coastguard Worker;
87*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v16i16_to_v16i32
88*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 4 {{.*}} zext
89*9880d681SAndroid Build Coastguard Worker;
90*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i16>, <16 x i16>* %a
91*9880d681SAndroid Build Coastguard Worker  %2 = zext <16 x i16> %1 to <16 x i32>
92*9880d681SAndroid Build Coastguard Worker  store <16 x i32> %2, <16 x i32>* undef, align 4
93*9880d681SAndroid Build Coastguard Worker  ret void
94*9880d681SAndroid Build Coastguard Worker}
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Workerdefine void @sext_v16i16_to_v16i32(<16 x i16>* %a) {
97*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v16i16_to_v16i32
98*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 8 {{.*}} sext
99*9880d681SAndroid Build Coastguard Worker;
100*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v16i16_to_v16i32
101*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 4 {{.*}} sext
102*9880d681SAndroid Build Coastguard Worker;
103*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i16>, <16 x i16>* %a
104*9880d681SAndroid Build Coastguard Worker  %2 = sext <16 x i16> %1 to <16 x i32>
105*9880d681SAndroid Build Coastguard Worker  store <16 x i32> %2, <16 x i32>* undef, align 4
106*9880d681SAndroid Build Coastguard Worker  ret void
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine void @zext_v8i16_to_v8i32(<8 x i16>* %a) {
110*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v8i16_to_v8i32
111*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 3 {{.*}} zext
112*9880d681SAndroid Build Coastguard Worker;
113*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v8i16_to_v8i32
114*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} zext
115*9880d681SAndroid Build Coastguard Worker;
116*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
117*9880d681SAndroid Build Coastguard Worker  %2 = zext <8 x i16> %1 to <8 x i32>
118*9880d681SAndroid Build Coastguard Worker  store <8 x i32> %2, <8 x i32>* undef, align 4
119*9880d681SAndroid Build Coastguard Worker  ret void
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine void @sext_v8i16_to_v8i32(<8 x i16>* %a) {
123*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v8i16_to_v8i32
124*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 4 {{.*}} sext
125*9880d681SAndroid Build Coastguard Worker;
126*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v8i16_to_v8i32
127*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} sext
128*9880d681SAndroid Build Coastguard Worker;
129*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
130*9880d681SAndroid Build Coastguard Worker  %2 = sext <8 x i16> %1 to <8 x i32>
131*9880d681SAndroid Build Coastguard Worker  store <8 x i32> %2, <8 x i32>* undef, align 4
132*9880d681SAndroid Build Coastguard Worker  ret void
133*9880d681SAndroid Build Coastguard Worker}
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Workerdefine void @zext_v4i16_to_v4i32(<4 x i16>* %a) {
136*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v4i16_to_v4i32
137*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 1 {{.*}} zext
138*9880d681SAndroid Build Coastguard Worker;
139*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v4i16_to_v4i32
140*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} zext
141*9880d681SAndroid Build Coastguard Worker;
142*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i16>, <4 x i16>* %a
143*9880d681SAndroid Build Coastguard Worker  %2 = zext <4 x i16> %1 to <4 x i32>
144*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* undef, align 4
145*9880d681SAndroid Build Coastguard Worker  ret void
146*9880d681SAndroid Build Coastguard Worker}
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Workerdefine void @sext_v4i16_to_v4i32(<4 x i16>* %a) {
149*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v4i16_to_v4i32
150*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 2 {{.*}} sext
151*9880d681SAndroid Build Coastguard Worker;
152*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v4i16_to_v4i32
153*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} sext
154*9880d681SAndroid Build Coastguard Worker;
155*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i16>, <4 x i16>* %a
156*9880d681SAndroid Build Coastguard Worker  %2 = sext <4 x i16> %1 to <4 x i32>
157*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* undef, align 4
158*9880d681SAndroid Build Coastguard Worker  ret void
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Workerdefine void @zext_v16i8_to_v16i32(<16 x i8>* %a) {
162*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v16i8_to_v16i32
163*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 9 {{.*}} zext
164*9880d681SAndroid Build Coastguard Worker;
165*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v16i8_to_v16i32
166*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 4 {{.*}} zext
167*9880d681SAndroid Build Coastguard Worker;
168*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
169*9880d681SAndroid Build Coastguard Worker  %2 = zext <16 x i8> %1 to <16 x i32>
170*9880d681SAndroid Build Coastguard Worker  store <16 x i32> %2, <16 x i32>* undef, align 4
171*9880d681SAndroid Build Coastguard Worker  ret void
172*9880d681SAndroid Build Coastguard Worker}
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Workerdefine void @sext_v16i8_to_v16i32(<16 x i8>* %a) {
175*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v16i8_to_v16i32
176*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 12 {{.*}} sext
177*9880d681SAndroid Build Coastguard Worker;
178*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v16i8_to_v16i32
179*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 4 {{.*}} sext
180*9880d681SAndroid Build Coastguard Worker;
181*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
182*9880d681SAndroid Build Coastguard Worker  %2 = sext <16 x i8> %1 to <16 x i32>
183*9880d681SAndroid Build Coastguard Worker  store <16 x i32> %2, <16 x i32>* undef, align 4
184*9880d681SAndroid Build Coastguard Worker  ret void
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Workerdefine void @zext_v8i8_to_v8i32(<8 x i8>* %a) {
188*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v8i8_to_v8i32
189*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 6 {{.*}} zext
190*9880d681SAndroid Build Coastguard Worker;
191*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v8i8_to_v8i32
192*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} zext
193*9880d681SAndroid Build Coastguard Worker;
194*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i8>, <8 x i8>* %a
195*9880d681SAndroid Build Coastguard Worker  %2 = zext <8 x i8> %1 to <8 x i32>
196*9880d681SAndroid Build Coastguard Worker  store <8 x i32> %2, <8 x i32>* undef, align 4
197*9880d681SAndroid Build Coastguard Worker  ret void
198*9880d681SAndroid Build Coastguard Worker}
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Workerdefine void @sext_v8i8_to_v8i32(<8 x i8>* %a) {
201*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v8i8_to_v8i32
202*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 6 {{.*}} sext
203*9880d681SAndroid Build Coastguard Worker;
204*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v8i8_to_v8i32
205*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} sext
206*9880d681SAndroid Build Coastguard Worker;
207*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i8>, <8 x i8>* %a
208*9880d681SAndroid Build Coastguard Worker  %2 = sext <8 x i8> %1 to <8 x i32>
209*9880d681SAndroid Build Coastguard Worker  store <8 x i32> %2, <8 x i32>* undef, align 4
210*9880d681SAndroid Build Coastguard Worker  ret void
211*9880d681SAndroid Build Coastguard Worker}
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerdefine void @zext_v4i8_to_v4i32(<4 x i8>* %a) {
214*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v4i8_to_v4i32
215*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 2 {{.*}} zext
216*9880d681SAndroid Build Coastguard Worker;
217*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v4i8_to_v4i32
218*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} zext
219*9880d681SAndroid Build Coastguard Worker;
220*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i8>, <4 x i8>* %a
221*9880d681SAndroid Build Coastguard Worker  %2 = zext <4 x i8> %1 to <4 x i32>
222*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* undef, align 4
223*9880d681SAndroid Build Coastguard Worker  ret void
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Workerdefine void @sext_v4i8_to_v4i32(<4 x i8>* %a) {
227*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v4i8_to_v4i32
228*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 3 {{.*}} sext
229*9880d681SAndroid Build Coastguard Worker;
230*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v4i8_to_v4i32
231*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} sext
232*9880d681SAndroid Build Coastguard Worker;
233*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i8>, <4 x i8>* %a
234*9880d681SAndroid Build Coastguard Worker  %2 = sext <4 x i8> %1 to <4 x i32>
235*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %2, <4 x i32>* undef, align 4
236*9880d681SAndroid Build Coastguard Worker  ret void
237*9880d681SAndroid Build Coastguard Worker}
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Workerdefine void @zext_v16i8_to_v16i16(<16 x i8>* %a) {
240*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v16i8_to_v16i16
241*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 3 {{.*}} zext
242*9880d681SAndroid Build Coastguard Worker;
243*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v16i8_to_v16i16
244*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} zext
245*9880d681SAndroid Build Coastguard Worker;
246*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
247*9880d681SAndroid Build Coastguard Worker  %2 = zext <16 x i8> %1 to <16 x i16>
248*9880d681SAndroid Build Coastguard Worker  store <16 x i16> %2, <16 x i16>* undef, align 4
249*9880d681SAndroid Build Coastguard Worker  ret void
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerdefine void @sext_v16i8_to_v16i16(<16 x i8>* %a) {
253*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v16i8_to_v16i16
254*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 4 {{.*}} sext
255*9880d681SAndroid Build Coastguard Worker;
256*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v16i8_to_v16i16
257*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} sext
258*9880d681SAndroid Build Coastguard Worker;
259*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i8>, <16 x i8>* %a
260*9880d681SAndroid Build Coastguard Worker  %2 = sext <16 x i8> %1 to <16 x i16>
261*9880d681SAndroid Build Coastguard Worker  store <16 x i16> %2, <16 x i16>* undef, align 4
262*9880d681SAndroid Build Coastguard Worker  ret void
263*9880d681SAndroid Build Coastguard Worker}
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Workerdefine void @zext_v8i8_to_v8i16(<8 x i8>* %a) {
266*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v8i8_to_v8i16
267*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 1 {{.*}} zext
268*9880d681SAndroid Build Coastguard Worker;
269*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v8i8_to_v8i16
270*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} zext
271*9880d681SAndroid Build Coastguard Worker;
272*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i8>, <8 x i8>* %a
273*9880d681SAndroid Build Coastguard Worker  %2 = zext <8 x i8> %1 to <8 x i16>
274*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* undef, align 4
275*9880d681SAndroid Build Coastguard Worker  ret void
276*9880d681SAndroid Build Coastguard Worker}
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerdefine void @sext_v8i8_to_v8i16(<8 x i8>* %a) {
279*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v8i8_to_v8i16
280*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 2 {{.*}} sext
281*9880d681SAndroid Build Coastguard Worker;
282*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v8i8_to_v8i16
283*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} sext
284*9880d681SAndroid Build Coastguard Worker;
285*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i8>, <8 x i8>* %a
286*9880d681SAndroid Build Coastguard Worker  %2 = sext <8 x i8> %1 to <8 x i16>
287*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* undef, align 4
288*9880d681SAndroid Build Coastguard Worker  ret void
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Workerdefine void @zext_v4i8_to_v4i16(<4 x i8>* %a) {
292*9880d681SAndroid Build Coastguard Worker; SSE2: zext_v4i8_to_v4i16
293*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 1 {{.*}} zext
294*9880d681SAndroid Build Coastguard Worker;
295*9880d681SAndroid Build Coastguard Worker; SSE41: zext_v4i8_to_v4i16
296*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} zext
297*9880d681SAndroid Build Coastguard Worker;
298*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i8>, <4 x i8>* %a
299*9880d681SAndroid Build Coastguard Worker  %2 = zext <4 x i8> %1 to <4 x i16>
300*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %2, <4 x i16>* undef, align 4
301*9880d681SAndroid Build Coastguard Worker  ret void
302*9880d681SAndroid Build Coastguard Worker}
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Workerdefine void @sext_v4i8_to_v4i16(<4 x i8>* %a) {
305*9880d681SAndroid Build Coastguard Worker; SSE2: sext_v4i8_to_v4i16
306*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 6 {{.*}} sext
307*9880d681SAndroid Build Coastguard Worker;
308*9880d681SAndroid Build Coastguard Worker; SSE41: sext_v4i8_to_v4i16
309*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} sext
310*9880d681SAndroid Build Coastguard Worker;
311*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i8>, <4 x i8>* %a
312*9880d681SAndroid Build Coastguard Worker  %2 = sext <4 x i8> %1 to <4 x i16>
313*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %2, <4 x i16>* undef, align 4
314*9880d681SAndroid Build Coastguard Worker  ret void
315*9880d681SAndroid Build Coastguard Worker}
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v16i32_to_v16i16(<16 x i32>* %a) {
318*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v16i32_to_v16i16
319*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 10 {{.*}} trunc
320*9880d681SAndroid Build Coastguard Worker;
321*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v16i32_to_v16i16
322*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 6 {{.*}} trunc
323*9880d681SAndroid Build Coastguard Worker;
324*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i32>, <16 x i32>* %a
325*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i16>
326*9880d681SAndroid Build Coastguard Worker  store <16 x i16> %2, <16 x i16>* undef, align 4
327*9880d681SAndroid Build Coastguard Worker  ret void
328*9880d681SAndroid Build Coastguard Worker}
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v8i32_to_v8i16(<8 x i32>* %a) {
331*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v8i32_to_v8i16
332*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 5 {{.*}} trunc
333*9880d681SAndroid Build Coastguard Worker;
334*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v8i32_to_v8i16
335*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 3 {{.*}} trunc
336*9880d681SAndroid Build Coastguard Worker;
337*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i32>, <8 x i32>* %a
338*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
339*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %2, <8 x i16>* undef, align 4
340*9880d681SAndroid Build Coastguard Worker  ret void
341*9880d681SAndroid Build Coastguard Worker}
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v4i32_to_v4i16(<4 x i32>* %a) {
344*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v4i32_to_v4i16
345*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 3 {{.*}} trunc
346*9880d681SAndroid Build Coastguard Worker;
347*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v4i32_to_v4i16
348*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} trunc
349*9880d681SAndroid Build Coastguard Worker;
350*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
351*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i32> %1 to <4 x i16>
352*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %2, <4 x i16>* undef, align 4
353*9880d681SAndroid Build Coastguard Worker  ret void
354*9880d681SAndroid Build Coastguard Worker}
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v16i32_to_v16i8(<16 x i32>* %a) {
357*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v16i32_to_v16i8
358*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 7 {{.*}} trunc
359*9880d681SAndroid Build Coastguard Worker;
360*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v16i32_to_v16i8
361*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 7 {{.*}} trunc
362*9880d681SAndroid Build Coastguard Worker;
363*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i32>, <16 x i32>* %a
364*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
365*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %2, <16 x i8>* undef, align 4
366*9880d681SAndroid Build Coastguard Worker  ret void
367*9880d681SAndroid Build Coastguard Worker}
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v8i32_to_v8i8(<8 x i32>* %a) {
370*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v8i32_to_v8i8
371*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 4 {{.*}} trunc
372*9880d681SAndroid Build Coastguard Worker;
373*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v8i32_to_v8i8
374*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 3 {{.*}} trunc
375*9880d681SAndroid Build Coastguard Worker;
376*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i32>, <8 x i32>* %a
377*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i8>
378*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %2, <8 x i8>* undef, align 4
379*9880d681SAndroid Build Coastguard Worker  ret void
380*9880d681SAndroid Build Coastguard Worker}
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v4i32_to_v4i8(<4 x i32>* %a) {
383*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v4i32_to_v4i8
384*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 3 {{.*}} trunc
385*9880d681SAndroid Build Coastguard Worker;
386*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v4i32_to_v4i8
387*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} trunc
388*9880d681SAndroid Build Coastguard Worker;
389*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i32>, <4 x i32>* %a
390*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i32> %1 to <4 x i8>
391*9880d681SAndroid Build Coastguard Worker  store <4 x i8> %2, <4 x i8>* undef, align 4
392*9880d681SAndroid Build Coastguard Worker  ret void
393*9880d681SAndroid Build Coastguard Worker}
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v16i16_to_v16i8(<16 x i16>* %a) {
396*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v16i16_to_v16i8
397*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 3 {{.*}} trunc
398*9880d681SAndroid Build Coastguard Worker;
399*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v16i16_to_v16i8
400*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 3 {{.*}} trunc
401*9880d681SAndroid Build Coastguard Worker;
402*9880d681SAndroid Build Coastguard Worker  %1 = load <16 x i16>, <16 x i16>* %a
403*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
404*9880d681SAndroid Build Coastguard Worker  store <16 x i8> %2, <16 x i8>* undef, align 4
405*9880d681SAndroid Build Coastguard Worker  ret void
406*9880d681SAndroid Build Coastguard Worker}
407*9880d681SAndroid Build Coastguard Worker
408*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v8i16_to_v8i8(<8 x i16>* %a) {
409*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v8i16_to_v8i8
410*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 2 {{.*}} trunc
411*9880d681SAndroid Build Coastguard Worker;
412*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v8i16_to_v8i8
413*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 1 {{.*}} trunc
414*9880d681SAndroid Build Coastguard Worker;
415*9880d681SAndroid Build Coastguard Worker  %1 = load <8 x i16>, <8 x i16>* %a
416*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i16> %1 to <8 x i8>
417*9880d681SAndroid Build Coastguard Worker  store <8 x i8> %2, <8 x i8>* undef, align 4
418*9880d681SAndroid Build Coastguard Worker  ret void
419*9880d681SAndroid Build Coastguard Worker}
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Workerdefine void @truncate_v4i16_to_v4i8(<4 x i16>* %a) {
422*9880d681SAndroid Build Coastguard Worker; SSE2: truncate_v4i16_to_v4i8
423*9880d681SAndroid Build Coastguard Worker; SSE2: cost of 4 {{.*}} trunc
424*9880d681SAndroid Build Coastguard Worker;
425*9880d681SAndroid Build Coastguard Worker; SSE41: truncate_v4i16_to_v4i8
426*9880d681SAndroid Build Coastguard Worker; SSE41: cost of 2 {{.*}} trunc
427*9880d681SAndroid Build Coastguard Worker;
428*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i16>, <4 x i16>* %a
429*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i16> %1 to <4 x i8>
430*9880d681SAndroid Build Coastguard Worker  store <4 x i8> %2, <4 x i8>* undef, align 4
431*9880d681SAndroid Build Coastguard Worker  ret void
432*9880d681SAndroid Build Coastguard Worker}
433