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
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
11 %1 = uitofp <2 x i8> %a to <2 x double>
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
22 %1 = uitofp <4 x i8> %a to <4 x double>
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
33 %1 = uitofp <8 x i8> %a to <8 x double>
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
44 %1 = uitofp <16 x i8> %a to <16 x double>
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
55 %1 = uitofp <32 x i8> %a to <32 x double>
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
66 %1 = uitofp <2 x i16> %a to <2 x double>
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
77 %1 = uitofp <4 x i16> %a to <4 x double>
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
88 %1 = uitofp <8 x i16> %a to <8 x double>
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
99 %1 = uitofp <16 x i16> %a to <16 x double>
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>
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>
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>
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>
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>
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>
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>
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>
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
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>