aed3f2a67bf9907bdbc7f781ef6c1fa4668f39a0
[oota-llvm.git] / test / Analysis / CostModel / X86 / uitofp.ll
1 ; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=core2 < %s | FileCheck --check-prefix=SSE2-CODEGEN %s
2 ; RUN: opt -mtriple=x86_64-apple-darwin -mcpu=core2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE2 %s
3
4 define <2 x double> @uitofpv2i8v2double(<2 x i8> %a) {
5   ; SSE2: uitofpv2i8v2double
6   ; SSE2: cost of 20 {{.*}} uitofp
7   ; SSE2-CODEGEN: uitofpv2i8v2double
8   ; SSE2-CODEGEN: movapd  LCPI
9   ; SSE2-CODEGEN: subpd
10   ; SSE2-CODEGEN: addpd
11   %1 = uitofp <2 x i8> %a to <2 x double>
12   ret <2 x double> %1
13 }
14
15 define <4 x double> @uitofpv4i8v4double(<4 x i8> %a) {
16   ; SSE2: uitofpv4i8v4double
17   ; SSE2: cost of 40 {{.*}} uitofp
18   ; SSE2-CODEGEN: uitofpv4i8v4double
19   ; SSE2-CODEGEN: movapd  LCPI
20   ; SSE2-CODEGEN: subpd
21   ; SSE2-CODEGEN: addpd
22   %1 = uitofp <4 x i8> %a to <4 x double>
23   ret <4 x double> %1
24 }
25
26 define <8 x double> @uitofpv8i8v8double(<8 x i8> %a) {
27   ; SSE2: uitofpv8i8v8double
28   ; SSE2: cost of 80 {{.*}} uitofp
29   ; SSE2-CODEGEN: uitofpv8i8v8double
30   ; SSE2-CODEGEN: movapd  LCPI
31   ; SSE2-CODEGEN: subpd
32   ; SSE2-CODEGEN: addpd
33 %1 = uitofp <8 x i8> %a to <8 x double>
34   ret <8 x double> %1
35 }
36
37 define <16 x double> @uitofpv16i8v16double(<16 x i8> %a) {
38   ; SSE2: uitofpv16i8v16double
39   ; SSE2: cost of 160 {{.*}} uitofp
40   ; SSE2-CODEGEN: uitofpv16i8v16double
41   ; SSE2-CODEGEN: movapd  LCPI
42   ; SSE2-CODEGEN: subpd
43   ; SSE2-CODEGEN: addpd
44   %1 = uitofp <16 x i8> %a to <16 x double>
45   ret <16 x double> %1
46 }
47
48 define <32 x double> @uitofpv32i8v32double(<32 x i8> %a) {
49   ; SSE2: uitofpv32i8v32double
50   ; SSE2: cost of 320 {{.*}} uitofp
51   ; SSE2-CODEGEN: uitofpv32i8v32double
52   ; SSE2-CODEGEN: movapd  LCPI
53   ; SSE2-CODEGEN: subpd
54   ; SSE2-CODEGEN: addpd
55   %1 = uitofp <32 x i8> %a to <32 x double>
56   ret <32 x double> %1
57 }
58
59 define <2 x double> @uitofpv2i16v2double(<2 x i16> %a) {
60   ; SSE2: uitofpv2i16v2double
61   ; SSE2: cost of 20 {{.*}} uitofp
62   ; SSE2-CODEGEN: uitofpv2i16v2double
63   ; SSE2-CODEGEN: movapd  LCPI
64   ; SSE2-CODEGEN: subpd
65   ; SSE2-CODEGEN: addpd
66   %1 = uitofp <2 x i16> %a to <2 x double>
67   ret <2 x double> %1
68 }
69
70 define <4 x double> @uitofpv4i16v4double(<4 x i16> %a) {
71   ; SSE2: uitofpv4i16v4double
72   ; SSE2: cost of 40 {{.*}} uitofp
73   ; SSE2-CODEGEN: uitofpv4i16v4double
74   ; SSE2-CODEGEN: movapd  LCPI
75   ; SSE2-CODEGEN: subpd
76   ; SSE2-CODEGEN: addpd
77   %1 = uitofp <4 x i16> %a to <4 x double>
78   ret <4 x double> %1
79 }
80
81 define <8 x double> @uitofpv8i16v8double(<8 x i16> %a) {
82   ; SSE2: uitofpv8i16v8double
83   ; SSE2: cost of 80 {{.*}} uitofp
84   ; SSE2-CODEGEN: uitofpv8i16v8double
85   ; SSE2-CODEGEN: movapd  LCPI
86   ; SSE2-CODEGEN: subpd
87   ; SSE2-CODEGEN: addpd
88   %1 = uitofp <8 x i16> %a to <8 x double>
89   ret <8 x double> %1
90 }
91
92 define <16 x double> @uitofpv16i16v16double(<16 x i16> %a) {
93   ; SSE2: uitofpv16i16v16double
94   ; SSE2: cost of 160 {{.*}} uitofp
95   ; SSE2-CODEGEN: uitofpv16i16v16double
96   ; SSE2-CODEGEN: movapd  LCPI
97   ; SSE2-CODEGEN: subpd
98   ; SSE2-CODEGEN: addpd
99   %1 = uitofp <16 x i16> %a to <16 x double>
100   ret <16 x double> %1
101 }
102
103 define <32 x double> @uitofpv32i16v32double(<32 x i16> %a) {
104   ; SSE2: uitofpv32i16v32double
105   ; SSE2: cost of 320 {{.*}} uitofp
106   ; SSE2-CODEGEN: uitofpv32i16v32double
107   ; SSE2-CODEGEN: movapd  LCPI
108   ; SSE2-CODEGEN: subpd
109   ; SSE2-CODEGEN: addpd
110   %1 = uitofp <32 x i16> %a to <32 x double>
111   ret <32 x double> %1
112 }
113
114 define <2 x double> @uitofpv2i32v2double(<2 x i32> %a) {
115   ; SSE2: uitofpv2i32v2double
116   ; SSE2: cost of 20 {{.*}} uitofp
117   ; SSE2-CODEGEN: uitofpv2i32v2double
118   ; SSE2-CODEGEN: movapd  LCPI
119   ; SSE2-CODEGEN: subpd
120   ; SSE2-CODEGEN: addpd
121   %1 = uitofp <2 x i32> %a to <2 x double>
122   ret <2 x double> %1
123 }
124
125 define <4 x double> @uitofpv4i32v4double(<4 x i32> %a) {
126   ; SSE2: uitofpv4i32v4double
127   ; SSE2: cost of 40 {{.*}} uitofp
128   ; SSE2-CODEGEN: uitofpv4i32v4double
129   ; SSE2-CODEGEN: movapd  LCPI
130   ; SSE2-CODEGEN: subpd
131   ; SSE2-CODEGEN: addpd
132   %1 = uitofp <4 x i32> %a to <4 x double>
133   ret <4 x double> %1
134 }
135
136 define <8 x double> @uitofpv8i32v8double(<8 x i32> %a) {
137   ; SSE2: uitofpv8i32v8double
138   ; SSE2: cost of 80 {{.*}} uitofp
139   ; SSE2-CODEGEN: uitofpv8i32v8double
140   ; SSE2-CODEGEN: movapd  LCPI
141   ; SSE2-CODEGEN: subpd
142   ; SSE2-CODEGEN: addpd
143   %1 = uitofp <8 x i32> %a to <8 x double>
144   ret <8 x double> %1
145 }
146
147 define <16 x double> @uitofpv16i32v16double(<16 x i32> %a) {
148   ; SSE2: uitofpv16i32v16double
149   ; SSE2: cost of 160 {{.*}} uitofp
150   ; SSE2-CODEGEN: uitofpv16i32v16double
151   ; SSE2-CODEGEN: movapd  LCPI
152   ; SSE2-CODEGEN: subpd
153   ; SSE2-CODEGEN: addpd
154   %1 = uitofp <16 x i32> %a to <16 x double>
155   ret <16 x double> %1
156 }
157
158 define <32 x double> @uitofpv32i32v32double(<32 x i32> %a) {
159   ; SSE2: uitofpv32i32v32double
160   ; SSE2: cost of 320 {{.*}} uitofp
161   ; SSE2-CODEGEN: uitofpv32i32v32double
162   ; SSE2-CODEGEN: movapd  LCPI
163   ; SSE2-CODEGEN: subpd
164   ; SSE2-CODEGEN: addpd
165   %1 = uitofp <32 x i32> %a to <32 x double>
166   ret <32 x double> %1
167 }
168
169 define <2 x double> @uitofpv2i64v2double(<2 x i64> %a) {
170   ; SSE2: uitofpv2i64v2double
171   ; SSE2: cost of 20 {{.*}} uitofp
172   ; SSE2-CODEGEN: uitofpv2i64v2double
173   ; SSE2-CODEGEN: movapd  LCPI
174   ; SSE2-CODEGEN: subpd
175   ; SSE2-CODEGEN: addpd
176   %1 = uitofp <2 x i64> %a to <2 x double>
177   ret <2 x double> %1
178 }
179
180 define <4 x double> @uitofpv4i64v4double(<4 x i64> %a) {
181   ; SSE2: uitofpv4i64v4double
182   ; SSE2: cost of 40 {{.*}} uitofp
183   ; SSE2-CODEGEN: uitofpv4i64v4double
184   ; SSE2-CODEGEN: movapd  LCPI
185   ; SSE2-CODEGEN: subpd
186   ; SSE2-CODEGEN: addpd
187   %1 = uitofp <4 x i64> %a to <4 x double>
188   ret <4 x double> %1
189 }
190
191 define <8 x double> @uitofpv8i64v8double(<8 x i64> %a) {
192   %1 = uitofp <8 x i64> %a to <8 x double>
193   ; SSE2: uitofpv8i64v8double
194   ; SSE2: cost of 80 {{.*}} uitofp
195   ; SSE2-CODEGEN: uitofpv8i64v8double
196   ; SSE2-CODEGEN: movapd  LCPI
197   ; SSE2-CODEGEN: subpd
198   ; SSE2-CODEGEN: addpd
199   ret <8 x double> %1
200 }
201
202 define <16 x double> @uitofpv16i64v16double(<16 x i64> %a) {
203   ; SSE2: uitofpv16i64v16double
204   ; SSE2: cost of 160 {{.*}} uitofp
205   ; SSE2-CODEGEN: uitofpv16i64v16double
206   ; SSE2-CODEGEN: movapd  LCPI
207   ; SSE2-CODEGEN: subpd
208   ; SSE2-CODEGEN: addpd
209   %1 = uitofp <16 x i64> %a to <16 x double>
210   ret <16 x double> %1
211 }
212
213 define <32 x double> @uitofpv32i64v32double(<32 x i64> %a) {
214   ; SSE2: uitofpv32i64v32double
215   ; SSE2: cost of 320 {{.*}} uitofp
216   ; SSE2-CODEGEN: uitofpv32i64v32double
217   ; SSE2-CODEGEN: movapd  LCPI
218   ; SSE2-CODEGEN: subpd
219   ; SSE2-CODEGEN: addpd
220   %1 = uitofp <32 x i64> %a to <32 x double>
221   ret <32 x double> %1
222 }
223
224 define <2 x float> @uitofpv2i8v2float(<2 x i8> %a) {
225   ; SSE2: uitofpv2i8v2float
226   ; SSE2: cost of 15 {{.*}} uitofp
227   %1 = uitofp <2 x i8> %a to <2 x float>
228   ret <2 x float> %1
229 }
230
231 define <4 x float> @uitofpv4i8v4float(<4 x i8> %a) {
232   ; SSE2: uitofpv4i8v4float
233   ; SSE2: cost of 15 {{.*}} uitofp
234   %1 = uitofp <4 x i8> %a to <4 x float>
235   ret <4 x float> %1
236 }
237
238 define <8 x float> @uitofpv8i8v8float(<8 x i8> %a) {
239   ; SSE2: uitofpv8i8v8float
240   ; SSE2: cost of 15 {{.*}} uitofp
241   %1 = uitofp <8 x i8> %a to <8 x float>
242   ret <8 x float> %1
243 }
244
245 define <16 x float> @uitofpv16i8v16float(<16 x i8> %a) {
246   ; SSE2: uitofpv16i8v16float
247   ; SSE2: cost of 8 {{.*}} uitofp
248   %1 = uitofp <16 x i8> %a to <16 x float>
249   ret <16 x float> %1
250 }
251
252 define <32 x float> @uitofpv32i8v32float(<32 x i8> %a) {
253   ; SSE2: uitofpv32i8v32float
254   ; SSE2: cost of 16 {{.*}} uitofp
255   %1 = uitofp <32 x i8> %a to <32 x float>
256   ret <32 x float> %1
257 }
258
259 define <2 x float> @uitofpv2i16v2float(<2 x i16> %a) {
260   ; SSE2: uitofpv2i16v2float
261   ; SSE2: cost of 15 {{.*}} uitofp
262   %1 = uitofp <2 x i16> %a to <2 x float>
263   ret <2 x float> %1
264 }
265
266 define <4 x float> @uitofpv4i16v4float(<4 x i16> %a) {
267   ; SSE2: uitofpv4i16v4float
268   ; SSE2: cost of 15 {{.*}} uitofp
269   %1 = uitofp <4 x i16> %a to <4 x float>
270   ret <4 x float> %1
271 }
272
273 define <8 x float> @uitofpv8i16v8float(<8 x i16> %a) {
274   ; SSE2: uitofpv8i16v8float
275   ; SSE2: cost of 15 {{.*}} uitofp
276   %1 = uitofp <8 x i16> %a to <8 x float>
277   ret <8 x float> %1
278 }
279
280 define <16 x float> @uitofpv16i16v16float(<16 x i16> %a) {
281   ; SSE2: uitofpv16i16v16float
282   ; SSE2: cost of 30 {{.*}} uitofp
283   %1 = uitofp <16 x i16> %a to <16 x float>
284   ret <16 x float> %1
285 }
286
287 define <32 x float> @uitofpv32i16v32float(<32 x i16> %a) {
288   ; SSE2: uitofpv32i16v32float
289   ; SSE2: cost of 60 {{.*}} uitofp
290   %1 = uitofp <32 x i16> %a to <32 x float>
291   ret <32 x float> %1
292 }
293
294 define <2 x float> @uitofpv2i32v2float(<2 x i32> %a) {
295   ; SSE2: uitofpv2i32v2float
296   ; SSE2: cost of 15 {{.*}} uitofp
297   %1 = uitofp <2 x i32> %a to <2 x float>
298   ret <2 x float> %1
299 }
300
301 define <4 x float> @uitofpv4i32v4float(<4 x i32> %a) {
302   ; SSE2: uitofpv4i32v4float
303   ; SSE2: cost of 15 {{.*}} uitofp
304   %1 = uitofp <4 x i32> %a to <4 x float>
305   ret <4 x float> %1
306 }
307
308 define <8 x float> @uitofpv8i32v8float(<8 x i32> %a) {
309   ; SSE2: uitofpv8i32v8float
310   ; SSE2: cost of 30 {{.*}} uitofp
311   %1 = uitofp <8 x i32> %a to <8 x float>
312   ret <8 x float> %1
313 }
314
315 define <16 x float> @uitofpv16i32v16float(<16 x i32> %a) {
316   ; SSE2: uitofpv16i32v16float
317   ; SSE2: cost of 60 {{.*}} uitofp
318   %1 = uitofp <16 x i32> %a to <16 x float>
319   ret <16 x float> %1
320 }
321
322 define <32 x float> @uitofpv32i32v32float(<32 x i32> %a) {
323   ; SSE2: uitofpv32i32v32float
324   ; SSE2: cost of 120 {{.*}} uitofp
325   %1 = uitofp <32 x i32> %a to <32 x float>
326   ret <32 x float> %1
327 }
328
329 define <2 x float> @uitofpv2i64v2float(<2 x i64> %a) {
330   ; SSE2: uitofpv2i64v2float
331   ; SSE2: cost of 15 {{.*}} uitofp
332   %1 = uitofp <2 x i64> %a to <2 x float>
333   ret <2 x float> %1
334 }
335
336 define <4 x float> @uitofpv4i64v4float(<4 x i64> %a) {
337   ; SSE2: uitofpv4i64v4float
338   ; SSE2: cost of 30 {{.*}} uitofp
339   %1 = uitofp <4 x i64> %a to <4 x float>
340   ret <4 x float> %1
341 }
342
343 define <8 x float> @uitofpv8i64v8float(<8 x i64> %a) {
344   ; SSE2: uitofpv8i64v8float
345   ; SSE2: cost of 60 {{.*}} uitofp
346   %1 = uitofp <8 x i64> %a to <8 x float>
347   ret <8 x float> %1
348 }
349
350 define <16 x float> @uitofpv16i64v16float(<16 x i64> %a) {
351   ; SSE2: uitofpv16i64v16float
352   ; SSE2: cost of 120 {{.*}} uitofp
353   %1 = uitofp <16 x i64> %a to <16 x float>
354   ret <16 x float> %1
355 }
356
357 define <32 x float> @uitofpv32i64v32float(<32 x i64> %a) {
358   ; SSE2: uitofpv32i64v32float
359   ; SSE2: cost of 240 {{.*}} uitofp
360   %1 = uitofp <32 x i64> %a to <32 x float>
361   ret <32 x float> %1
362 }