1 ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+sse2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE --check-prefix=SSE2 %s 2 ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx -cost-model -analyze < %s | FileCheck --check-prefix=AVX --check-prefix=AVX1 %s 3 ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx2 -cost-model -analyze < %s | FileCheck --check-prefix=AVX --check-prefix=AVX2 %s 4 ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx512f -cost-model -analyze < %s | FileCheck --check-prefix=AVX512F %s 5 6 define <2 x double> @sitofpv2i8v2double(<2 x i8> %a) { 7 ; SSE2-LABEL: sitofpv2i8v2double 8 ; SSE2: cost of 20 {{.*}} sitofp 9 ; 10 ; AVX1-LABEL: sitofpv2i8v2double 11 ; AVX1: cost of 4 {{.*}} sitofp 12 ; 13 ; AVX2-LABEL: sitofpv2i8v2double 14 ; AVX2: cost of 4 {{.*}} sitofp 15 ; 16 ; AVX512F-LABEL: sitofpv2i8v2double 17 ; AVX512F: cost of 4 {{.*}} sitofp 18 %1 = sitofp <2 x i8> %a to <2 x double> 19 ret <2 x double> %1 20 } 21 22 define <4 x double> @sitofpv4i8v4double(<4 x i8> %a) { 23 ; SSE2-LABEL: sitofpv4i8v4double 24 ; SSE2: cost of 40 {{.*}} sitofp 25 ; 26 ; AVX1-LABEL: sitofpv4i8v4double 27 ; AVX1: cost of 3 {{.*}} sitofp 28 ; 29 ; AVX2-LABEL: sitofpv4i8v4double 30 ; AVX2: cost of 3 {{.*}} sitofp 31 ; 32 ; AVX512F-LABEL: sitofpv4i8v4double 33 ; AVX512F: cost of 3 {{.*}} sitofp 34 %1 = sitofp <4 x i8> %a to <4 x double> 35 ret <4 x double> %1 36 } 37 38 define <8 x double> @sitofpv8i8v8double(<8 x i8> %a) { 39 ; SSE2-LABEL: sitofpv8i8v8double 40 ; SSE2: cost of 80 {{.*}} sitofp 41 ; 42 ; AVX1-LABEL: sitofpv8i8v8double 43 ; AVX1: cost of 20 {{.*}} sitofp 44 ; 45 ; AVX2-LABEL: sitofpv8i8v8double 46 ; AVX2: cost of 20 {{.*}} sitofp 47 ; 48 ; AVX512F-LABEL: sitofpv8i8v8double 49 ; AVX512F: cost of 2 {{.*}} sitofp 50 %1 = sitofp <8 x i8> %a to <8 x double> 51 ret <8 x double> %1 52 } 53 54 define <16 x double> @sitofpv16i8v16double(<16 x i8> %a) { 55 ; SSE2-LABEL: sitofpv16i8v16double 56 ; SSE2: cost of 160 {{.*}} sitofp 57 ; 58 ; AVX1-LABEL: sitofpv16i8v16double 59 ; AVX1: cost of 40 {{.*}} sitofp 60 ; 61 ; AVX2-LABEL: sitofpv16i8v16double 62 ; AVX2: cost of 40 {{.*}} sitofp 63 ; 64 ; AVX512F-LABEL: sitofpv16i8v16double 65 ; AVX512F: cost of 44 {{.*}} sitofp 66 %1 = sitofp <16 x i8> %a to <16 x double> 67 ret <16 x double> %1 68 } 69 70 define <32 x double> @sitofpv32i8v32double(<32 x i8> %a) { 71 ; SSE2-LABEL: sitofpv32i8v32double 72 ; SSE2: cost of 320 {{.*}} sitofp 73 ; 74 ; AVX1-LABEL: sitofpv32i8v32double 75 ; AVX1: cost of 80 {{.*}} sitofp 76 ; 77 ; AVX2-LABEL: sitofpv32i8v32double 78 ; AVX2: cost of 80 {{.*}} sitofp 79 ; 80 ; AVX512F-LABEL: sitofpv32i8v32double 81 ; AVX512F: cost of 88 {{.*}} sitofp 82 %1 = sitofp <32 x i8> %a to <32 x double> 83 ret <32 x double> %1 84 } 85 86 define <2 x double> @sitofpv2i16v2double(<2 x i16> %a) { 87 ; SSE2-LABEL: sitofpv2i16v2double 88 ; SSE2: cost of 20 {{.*}} sitofp 89 ; 90 ; AVX1-LABEL: sitofpv2i16v2double 91 ; AVX1: cost of 4 {{.*}} sitofp 92 ; 93 ; AVX2-LABEL: sitofpv2i16v2double 94 ; AVX2: cost of 4 {{.*}} sitofp 95 ; 96 ; AVX512F-LABEL: sitofpv2i16v2double 97 ; AVX512F: cost of 4 {{.*}} sitofp 98 %1 = sitofp <2 x i16> %a to <2 x double> 99 ret <2 x double> %1 100 } 101 102 define <4 x double> @sitofpv4i16v4double(<4 x i16> %a) { 103 ; SSE2-LABEL: sitofpv4i16v4double 104 ; SSE2: cost of 40 {{.*}} sitofp 105 ; 106 ; AVX1-LABEL: sitofpv4i16v4double 107 ; AVX1: cost of 3 {{.*}} sitofp 108 ; 109 ; AVX2-LABEL: sitofpv4i16v4double 110 ; AVX2: cost of 3 {{.*}} sitofp 111 ; 112 ; AVX512F-LABEL: sitofpv4i16v4double 113 ; AVX512F: cost of 3 {{.*}} sitofp 114 %1 = sitofp <4 x i16> %a to <4 x double> 115 ret <4 x double> %1 116 } 117 118 define <8 x double> @sitofpv8i16v8double(<8 x i16> %a) { 119 ; SSE2-LABEL: sitofpv8i16v8double 120 ; SSE2: cost of 80 {{.*}} sitofp 121 ; 122 ; AVX1-LABEL: sitofpv8i16v8double 123 ; AVX1: cost of 20 {{.*}} sitofp 124 ; 125 ; AVX2-LABEL: sitofpv8i16v8double 126 ; AVX2: cost of 20 {{.*}} sitofp 127 ; 128 ; AVX512F-LABEL: sitofpv8i16v8double 129 ; AVX512F: cost of 2 {{.*}} sitofp 130 %1 = sitofp <8 x i16> %a to <8 x double> 131 ret <8 x double> %1 132 } 133 134 define <16 x double> @sitofpv16i16v16double(<16 x i16> %a) { 135 ; SSE2-LABEL: sitofpv16i16v16double 136 ; SSE2: cost of 160 {{.*}} sitofp 137 ; 138 ; AVX1-LABEL: sitofpv16i16v16double 139 ; AVX1: cost of 40 {{.*}} sitofp 140 ; 141 ; AVX2-LABEL: sitofpv16i16v16double 142 ; AVX2: cost of 40 {{.*}} sitofp 143 ; 144 ; AVX512F-LABEL: sitofpv16i16v16double 145 ; AVX512F: cost of 44 {{.*}} sitofp 146 %1 = sitofp <16 x i16> %a to <16 x double> 147 ret <16 x double> %1 148 } 149 150 define <32 x double> @sitofpv32i16v32double(<32 x i16> %a) { 151 ; SSE2-LABEL: sitofpv32i16v32double 152 ; SSE2: cost of 320 {{.*}} sitofp 153 ; 154 ; AVX1-LABEL: sitofpv32i16v32double 155 ; AVX1: cost of 80 {{.*}} sitofp 156 ; 157 ; AVX2-LABEL: sitofpv32i16v32double 158 ; AVX2: cost of 80 {{.*}} sitofp 159 ; 160 ; AVX512F-LABEL: sitofpv32i16v32double 161 ; AVX512F: cost of 88 {{.*}} sitofp 162 %1 = sitofp <32 x i16> %a to <32 x double> 163 ret <32 x double> %1 164 } 165 166 define <2 x double> @sitofpv2i32v2double(<2 x i32> %a) { 167 ; SSE2-LABEL: sitofpv2i32v2double 168 ; SSE2: cost of 20 {{.*}} sitofp 169 ; 170 ; AVX1-LABEL: sitofpv2i32v2double 171 ; AVX1: cost of 4 {{.*}} sitofp 172 ; 173 ; AVX2-LABEL: sitofpv2i32v2double 174 ; AVX2: cost of 4 {{.*}} sitofp 175 ; 176 ; AVX512F-LABEL: sitofpv2i32v2double 177 ; AVX512F: cost of 4 {{.*}} sitofp 178 %1 = sitofp <2 x i32> %a to <2 x double> 179 ret <2 x double> %1 180 } 181 182 define <4 x double> @sitofpv4i32v4double(<4 x i32> %a) { 183 ; SSE2-LABEL: sitofpv4i32v4double 184 ; SSE2: cost of 40 {{.*}} sitofp 185 ; 186 ; AVX1-LABEL: sitofpv4i32v4double 187 ; AVX1: cost of 1 {{.*}} sitofp 188 ; 189 ; AVX2-LABEL: sitofpv4i32v4double 190 ; AVX2: cost of 1 {{.*}} sitofp 191 ; 192 ; AVX512F-LABEL: sitofpv4i32v4double 193 ; AVX512F: cost of 1 {{.*}} sitofp 194 %1 = sitofp <4 x i32> %a to <4 x double> 195 ret <4 x double> %1 196 } 197 198 define <8 x double> @sitofpv8i32v8double(<8 x i32> %a) { 199 ; SSE2-LABEL: sitofpv8i32v8double 200 ; SSE2: cost of 80 {{.*}} sitofp 201 ; 202 ; AVX1-LABEL: sitofpv8i32v8double 203 ; AVX1: cost of 20 {{.*}} sitofp 204 ; 205 ; AVX2-LABEL: sitofpv8i32v8double 206 ; AVX2: cost of 20 {{.*}} sitofp 207 ; 208 ; AVX512F-LABEL: sitofpv8i32v8double 209 ; AVX512F: cost of 1 {{.*}} sitofp 210 %1 = sitofp <8 x i32> %a to <8 x double> 211 ret <8 x double> %1 212 } 213 214 define <16 x double> @sitofpv16i32v16double(<16 x i32> %a) { 215 ; SSE2-LABEL: sitofpv16i32v16double 216 ; SSE2: cost of 160 {{.*}} sitofp 217 ; 218 ; AVX1-LABEL: sitofpv16i32v16double 219 ; AVX1: cost of 40 {{.*}} sitofp 220 ; 221 ; AVX2-LABEL: sitofpv16i32v16double 222 ; AVX2: cost of 40 {{.*}} sitofp 223 ; 224 ; AVX512F-LABEL: sitofpv16i32v16double 225 ; AVX512F: cost of 44 {{.*}} sitofp 226 %1 = sitofp <16 x i32> %a to <16 x double> 227 ret <16 x double> %1 228 } 229 230 define <32 x double> @sitofpv32i32v32double(<32 x i32> %a) { 231 ; SSE2-LABEL: sitofpv32i32v32double 232 ; SSE2: cost of 320 {{.*}} sitofp 233 ; 234 ; AVX1-LABEL: sitofpv32i32v32double 235 ; AVX1: cost of 80 {{.*}} sitofp 236 ; 237 ; AVX2-LABEL: sitofpv32i32v32double 238 ; AVX2: cost of 80 {{.*}} sitofp 239 ; 240 ; AVX512F-LABEL: sitofpv32i32v32double 241 ; AVX512F: cost of 88 {{.*}} sitofp 242 %1 = sitofp <32 x i32> %a to <32 x double> 243 ret <32 x double> %1 244 } 245 246 define <2 x double> @sitofpv2i64v2double(<2 x i64> %a) { 247 ; SSE2-LABEL: sitofpv2i64v2double 248 ; SSE2: cost of 20 {{.*}} sitofp 249 ; 250 ; AVX1-LABEL: sitofpv2i64v2double 251 ; AVX1: cost of 20 {{.*}} sitofp 252 ; 253 ; AVX2-LABEL: sitofpv2i64v2double 254 ; AVX2: cost of 20 {{.*}} sitofp 255 ; 256 ; AVX512F-LABEL: sitofpv2i64v2double 257 ; AVX512F: cost of 20 {{.*}} sitofp 258 %1 = sitofp <2 x i64> %a to <2 x double> 259 ret <2 x double> %1 260 } 261 262 define <4 x double> @sitofpv4i64v4double(<4 x i64> %a) { 263 ; SSE2-LABEL: sitofpv4i64v4double 264 ; SSE2: cost of 40 {{.*}} sitofp 265 ; 266 ; AVX1-LABEL: sitofpv4i64v4double 267 ; AVX1: cost of 10 {{.*}} sitofp 268 ; 269 ; AVX2-LABEL: sitofpv4i64v4double 270 ; AVX2: cost of 10 {{.*}} sitofp 271 ; 272 ; AVX512F-LABEL: sitofpv4i64v4double 273 ; AVX512F: cost of 10 {{.*}} sitofp 274 %1 = sitofp <4 x i64> %a to <4 x double> 275 ret <4 x double> %1 276 } 277 278 define <8 x double> @sitofpv8i64v8double(<8 x i64> %a) { 279 ; SSE2-LABEL: sitofpv8i64v8double 280 ; SSE2: cost of 80 {{.*}} sitofp 281 ; 282 ; AVX1-LABEL: sitofpv8i64v8double 283 ; AVX1: cost of 20 {{.*}} sitofp 284 ; 285 ; AVX2-LABEL: sitofpv8i64v8double 286 ; AVX2: cost of 20 {{.*}} sitofp 287 ; 288 ; AVX512F-LABEL: sitofpv8i64v8double 289 ; AVX512F: cost of 22 {{.*}} sitofp 290 %1 = sitofp <8 x i64> %a to <8 x double> 291 ret <8 x double> %1 292 } 293 294 define <16 x double> @sitofpv16i64v16double(<16 x i64> %a) { 295 ; SSE2-LABEL: sitofpv16i64v16double 296 ; SSE2: cost of 160 {{.*}} sitofp 297 ; 298 ; AVX1-LABEL: sitofpv16i64v16double 299 ; AVX1: cost of 40 {{.*}} sitofp 300 ; 301 ; AVX2-LABEL: sitofpv16i64v16double 302 ; AVX2: cost of 40 {{.*}} sitofp 303 ; 304 ; AVX512F-LABEL: sitofpv16i64v16double 305 ; AVX512F: cost of 44 {{.*}} sitofp 306 %1 = sitofp <16 x i64> %a to <16 x double> 307 ret <16 x double> %1 308 } 309 310 define <32 x double> @sitofpv32i64v32double(<32 x i64> %a) { 311 ; SSE2-LABEL: sitofpv32i64v32double 312 ; SSE2: cost of 320 {{.*}} sitofp 313 ; 314 ; AVX1-LABEL: sitofpv32i64v32double 315 ; AVX1: cost of 80 {{.*}} sitofp 316 ; 317 ; AVX2-LABEL: sitofpv32i64v32double 318 ; AVX2: cost of 80 {{.*}} sitofp 319 ; 320 ; AVX512F-LABEL: sitofpv32i64v32double 321 ; AVX512F: cost of 88 {{.*}} sitofp 322 %1 = sitofp <32 x i64> %a to <32 x double> 323 ret <32 x double> %1 324 } 325 326 define <2 x float> @sitofpv2i8v2float(<2 x i8> %a) { 327 ; SSE2-LABEL: sitofpv2i8v2float 328 ; SSE2: cost of 15 {{.*}} sitofp 329 ; 330 ; AVX1-LABEL: sitofpv2i8v2float 331 ; AVX1: cost of 4 {{.*}} sitofp 332 ; 333 ; AVX2-LABEL: sitofpv2i8v2float 334 ; AVX2: cost of 4 {{.*}} sitofp 335 ; 336 ; AVX512F-LABEL: sitofpv2i8v2float 337 ; AVX512F: cost of 4 {{.*}} sitofp 338 %1 = sitofp <2 x i8> %a to <2 x float> 339 ret <2 x float> %1 340 } 341 342 define <4 x float> @sitofpv4i8v4float(<4 x i8> %a) { 343 ; SSE2-LABEL: sitofpv4i8v4float 344 ; SSE2: cost of 15 {{.*}} sitofp 345 ; 346 ; AVX1-LABEL: sitofpv4i8v4float 347 ; AVX1: cost of 3 {{.*}} sitofp 348 ; 349 ; AVX2-LABEL: sitofpv4i8v4float 350 ; AVX2: cost of 3 {{.*}} sitofp 351 ; 352 ; AVX512F-LABEL: sitofpv4i8v4float 353 ; AVX512F: cost of 3 {{.*}} sitofp 354 %1 = sitofp <4 x i8> %a to <4 x float> 355 ret <4 x float> %1 356 } 357 358 define <8 x float> @sitofpv8i8v8float(<8 x i8> %a) { 359 ; SSE2-LABEL: sitofpv8i8v8float 360 ; SSE2: cost of 15 {{.*}} sitofp 361 ; 362 ; AVX1-LABEL: sitofpv8i8v8float 363 ; AVX1: cost of 8 {{.*}} sitofp 364 ; 365 ; AVX2-LABEL: sitofpv8i8v8float 366 ; AVX2: cost of 8 {{.*}} sitofp 367 ; 368 ; AVX512F-LABEL: sitofpv8i8v8float 369 ; AVX512F: cost of 8 {{.*}} sitofp 370 %1 = sitofp <8 x i8> %a to <8 x float> 371 ret <8 x float> %1 372 } 373 374 define <16 x float> @sitofpv16i8v16float(<16 x i8> %a) { 375 ; SSE2-LABEL: sitofpv16i8v16float 376 ; SSE2: cost of 8 {{.*}} sitofp 377 ; 378 ; AVX1-LABEL: sitofpv16i8v16float 379 ; AVX1: cost of 44 {{.*}} sitofp 380 ; 381 ; AVX2-LABEL: sitofpv16i8v16float 382 ; AVX2: cost of 44 {{.*}} sitofp 383 ; 384 ; AVX512F-LABEL: sitofpv16i8v16float 385 ; AVX512F: cost of 2 {{.*}} sitofp 386 %1 = sitofp <16 x i8> %a to <16 x float> 387 ret <16 x float> %1 388 } 389 390 define <32 x float> @sitofpv32i8v32float(<32 x i8> %a) { 391 ; SSE2-LABEL: sitofpv32i8v32float 392 ; SSE2: cost of 16 {{.*}} sitofp 393 ; 394 ; AVX1-LABEL: sitofpv32i8v32float 395 ; AVX1: cost of 88 {{.*}} sitofp 396 ; 397 ; AVX2-LABEL: sitofpv32i8v32float 398 ; AVX2: cost of 88 {{.*}} sitofp 399 ; 400 ; AVX512F-LABEL: sitofpv32i8v32float 401 ; AVX512F: cost of 92 {{.*}} sitofp 402 %1 = sitofp <32 x i8> %a to <32 x float> 403 ret <32 x float> %1 404 } 405 406 define <2 x float> @sitofpv2i16v2float(<2 x i16> %a) { 407 ; SSE2-LABEL: sitofpv2i16v2float 408 ; SSE2: cost of 15 {{.*}} sitofp 409 ; 410 ; AVX1-LABEL: sitofpv2i16v2float 411 ; AVX1: cost of 4 {{.*}} sitofp 412 ; 413 ; AVX2-LABEL: sitofpv2i16v2float 414 ; AVX2: cost of 4 {{.*}} sitofp 415 ; 416 ; AVX512F-LABEL: sitofpv2i16v2float 417 ; AVX512F: cost of 4 {{.*}} sitofp 418 %1 = sitofp <2 x i16> %a to <2 x float> 419 ret <2 x float> %1 420 } 421 422 define <4 x float> @sitofpv4i16v4float(<4 x i16> %a) { 423 ; SSE2-LABEL: sitofpv4i16v4float 424 ; SSE2: cost of 15 {{.*}} sitofp 425 ; 426 ; AVX1-LABEL: sitofpv4i16v4float 427 ; AVX1: cost of 3 {{.*}} sitofp 428 ; 429 ; AVX2-LABEL: sitofpv4i16v4float 430 ; AVX2: cost of 3 {{.*}} sitofp 431 ; 432 ; AVX512F-LABEL: sitofpv4i16v4float 433 ; AVX512F: cost of 3 {{.*}} sitofp 434 %1 = sitofp <4 x i16> %a to <4 x float> 435 ret <4 x float> %1 436 } 437 438 define <8 x float> @sitofpv8i16v8float(<8 x i16> %a) { 439 ; SSE2-LABEL: sitofpv8i16v8float 440 ; SSE2: cost of 15 {{.*}} sitofp 441 ; 442 ; AVX1-LABEL: sitofpv8i16v8float 443 ; AVX1: cost of 5 {{.*}} sitofp 444 ; 445 ; AVX2-LABEL: sitofpv8i16v8float 446 ; AVX2: cost of 5 {{.*}} sitofp 447 ; 448 ; AVX512F-LABEL: sitofpv8i16v8float 449 ; AVX512F: cost of 5 {{.*}} sitofp 450 %1 = sitofp <8 x i16> %a to <8 x float> 451 ret <8 x float> %1 452 } 453 454 define <16 x float> @sitofpv16i16v16float(<16 x i16> %a) { 455 ; SSE2-LABEL: sitofpv16i16v16float 456 ; SSE2: cost of 30 {{.*}} sitofp 457 ; 458 ; AVX1-LABEL: sitofpv16i16v16float 459 ; AVX1: cost of 44 {{.*}} sitofp 460 ; 461 ; AVX2-LABEL: sitofpv16i16v16float 462 ; AVX2: cost of 44 {{.*}} sitofp 463 ; 464 ; AVX512F-LABEL: sitofpv16i16v16float 465 ; AVX512F: cost of 2 {{.*}} sitofp 466 %1 = sitofp <16 x i16> %a to <16 x float> 467 ret <16 x float> %1 468 } 469 470 define <32 x float> @sitofpv32i16v32float(<32 x i16> %a) { 471 ; SSE2-LABEL: sitofpv32i16v32float 472 ; SSE2: cost of 60 {{.*}} sitofp 473 ; 474 ; AVX1-LABEL: sitofpv32i16v32float 475 ; AVX1: cost of 88 {{.*}} sitofp 476 ; 477 ; AVX2-LABEL: sitofpv32i16v32float 478 ; AVX2: cost of 88 {{.*}} sitofp 479 ; 480 ; AVX512F-LABEL: sitofpv32i16v32float 481 ; AVX512F: cost of 92 {{.*}} sitofp 482 %1 = sitofp <32 x i16> %a to <32 x float> 483 ret <32 x float> %1 484 } 485 486 define <2 x float> @sitofpv2i32v2float(<2 x i32> %a) { 487 ; SSE2-LABEL: sitofpv2i32v2float 488 ; SSE2: cost of 15 {{.*}} sitofp 489 ; 490 ; AVX1-LABEL: sitofpv2i32v2float 491 ; AVX1: cost of 4 {{.*}} sitofp 492 ; 493 ; AVX2-LABEL: sitofpv2i32v2float 494 ; AVX2: cost of 4 {{.*}} sitofp 495 ; 496 ; AVX512F-LABEL: sitofpv2i32v2float 497 ; AVX512F: cost of 4 {{.*}} sitofp 498 %1 = sitofp <2 x i32> %a to <2 x float> 499 ret <2 x float> %1 500 } 501 502 define <4 x float> @sitofpv4i32v4float(<4 x i32> %a) { 503 ; SSE2-LABEL: sitofpv4i32v4float 504 ; SSE2: cost of 15 {{.*}} sitofp 505 ; 506 ; AVX1-LABEL: sitofpv4i32v4float 507 ; AVX1: cost of 1 {{.*}} sitofp 508 ; 509 ; AVX2-LABEL: sitofpv4i32v4float 510 ; AVX2: cost of 1 {{.*}} sitofp 511 ; 512 ; AVX512F-LABEL: sitofpv4i32v4float 513 ; AVX512F: cost of 1 {{.*}} sitofp 514 %1 = sitofp <4 x i32> %a to <4 x float> 515 ret <4 x float> %1 516 } 517 518 define <8 x float> @sitofpv8i32v8float(<8 x i32> %a) { 519 ; SSE2-LABEL: sitofpv8i32v8float 520 ; SSE2: cost of 30 {{.*}} sitofp 521 ; 522 ; AVX1-LABEL: sitofpv8i32v8float 523 ; AVX1: cost of 1 {{.*}} sitofp 524 ; 525 ; AVX2-LABEL: sitofpv8i32v8float 526 ; AVX2: cost of 1 {{.*}} sitofp 527 ; 528 ; AVX512F-LABEL: sitofpv8i32v8float 529 ; AVX512F: cost of 1 {{.*}} sitofp 530 %1 = sitofp <8 x i32> %a to <8 x float> 531 ret <8 x float> %1 532 } 533 534 define <16 x float> @sitofpv16i32v16float(<16 x i32> %a) { 535 ; SSE2-LABEL: sitofpv16i32v16float 536 ; SSE2: cost of 60 {{.*}} sitofp 537 ; 538 ; AVX1-LABEL: sitofpv16i32v16float 539 ; AVX1: cost of 44 {{.*}} sitofp 540 ; 541 ; AVX2-LABEL: sitofpv16i32v16float 542 ; AVX2: cost of 44 {{.*}} sitofp 543 ; 544 ; AVX512F-LABEL: sitofpv16i32v16float 545 ; AVX512F: cost of 1 {{.*}} sitofp 546 %1 = sitofp <16 x i32> %a to <16 x float> 547 ret <16 x float> %1 548 } 549 550 define <32 x float> @sitofpv32i32v32float(<32 x i32> %a) { 551 ; SSE2-LABEL: sitofpv32i32v32float 552 ; SSE2: cost of 120 {{.*}} sitofp 553 ; 554 ; AVX1-LABEL: sitofpv32i32v32float 555 ; AVX1: cost of 88 {{.*}} sitofp 556 ; 557 ; AVX2-LABEL: sitofpv32i32v32float 558 ; AVX2: cost of 88 {{.*}} sitofp 559 ; 560 ; AVX512F-LABEL: sitofpv32i32v32float 561 ; AVX512F: cost of 92 {{.*}} sitofp 562 %1 = sitofp <32 x i32> %a to <32 x float> 563 ret <32 x float> %1 564 } 565 566 define <2 x float> @sitofpv2i64v2float(<2 x i64> %a) { 567 ; SSE2-LABEL: sitofpv2i64v2float 568 ; SSE2: cost of 15 {{.*}} sitofp 569 ; 570 ; AVX1-LABEL: sitofpv2i64v2float 571 ; AVX1: cost of 4 {{.*}} sitofp 572 ; 573 ; AVX2-LABEL: sitofpv2i64v2float 574 ; AVX2: cost of 4 {{.*}} sitofp 575 ; 576 ; AVX512F-LABEL: sitofpv2i64v2float 577 ; AVX512F: cost of 4 {{.*}} sitofp 578 %1 = sitofp <2 x i64> %a to <2 x float> 579 ret <2 x float> %1 580 } 581 582 define <4 x float> @sitofpv4i64v4float(<4 x i64> %a) { 583 ; SSE2-LABEL: sitofpv4i64v4float 584 ; SSE2: cost of 30 {{.*}} sitofp 585 ; 586 ; AVX1-LABEL: sitofpv4i64v4float 587 ; AVX1: cost of 10 {{.*}} sitofp 588 ; 589 ; AVX2-LABEL: sitofpv4i64v4float 590 ; AVX2: cost of 10 {{.*}} sitofp 591 ; 592 ; AVX512F-LABEL: sitofpv4i64v4float 593 ; AVX512F: cost of 10 {{.*}} sitofp 594 %1 = sitofp <4 x i64> %a to <4 x float> 595 ret <4 x float> %1 596 } 597 598 define <8 x float> @sitofpv8i64v8float(<8 x i64> %a) { 599 ; SSE2-LABEL: sitofpv8i64v8float 600 ; SSE2: cost of 60 {{.*}} sitofp 601 ; 602 ; AVX1-LABEL: sitofpv8i64v8float 603 ; AVX1: cost of 22 {{.*}} sitofp 604 ; 605 ; AVX2-LABEL: sitofpv8i64v8float 606 ; AVX2: cost of 22 {{.*}} sitofp 607 ; 608 ; AVX512F-LABEL: sitofpv8i64v8float 609 ; AVX512F: cost of 22 {{.*}} sitofp 610 %1 = sitofp <8 x i64> %a to <8 x float> 611 ret <8 x float> %1 612 } 613 614 define <16 x float> @sitofpv16i64v16float(<16 x i64> %a) { 615 ; SSE2-LABEL: sitofpv16i64v16float 616 ; SSE2: cost of 120 {{.*}} sitofp 617 ; 618 ; AVX1-LABEL: sitofpv16i64v16float 619 ; AVX1: cost of 44 {{.*}} sitofp 620 ; 621 ; AVX2-LABEL: sitofpv16i64v16float 622 ; AVX2: cost of 44 {{.*}} sitofp 623 ; 624 ; AVX512F-LABEL: sitofpv16i64v16float 625 ; AVX512F: cost of 46 {{.*}} sitofp 626 %1 = sitofp <16 x i64> %a to <16 x float> 627 ret <16 x float> %1 628 } 629 630 define <32 x float> @sitofpv32i64v32float(<32 x i64> %a) { 631 ; SSE2-LABEL: sitofpv32i64v32float 632 ; SSE2: cost of 240 {{.*}} sitofp 633 ; 634 ; AVX1-LABEL: sitofpv32i64v32float 635 ; AVX1: cost of 88 {{.*}} sitofp 636 ; 637 ; AVX2-LABEL: sitofpv32i64v32float 638 ; AVX2: cost of 88 {{.*}} sitofp 639 ; 640 ; AVX512F-LABEL: sitofpv32i64v32float 641 ; AVX512F: cost of 92 {{.*}} sitofp 642 %1 = sitofp <32 x i64> %a to <32 x float> 643 ret <32 x float> %1 644 } 645 646 define <8 x double> @sitofpv8i1v8double(<8 x double> %a) { 647 ; SSE2-LABEL: sitofpv8i1v8double 648 ; SSE2: cost of 80 {{.*}} sitofp 649 ; 650 ; AVX1-LABEL: sitofpv8i1v8double 651 ; AVX1: cost of 20 {{.*}} sitofp 652 ; 653 ; AVX2-LABEL: sitofpv8i1v8double 654 ; AVX2: cost of 20 {{.*}} sitofp 655 ; 656 ; AVX512F-LABEL: sitofpv8i1v8double 657 ; AVX512F: cost of 4 {{.*}} sitofp 658 %cmpres = fcmp ogt <8 x double> %a, zeroinitializer 659 %1 = sitofp <8 x i1> %cmpres to <8 x double> 660 ret <8 x double> %1 661 } 662 663 define <16 x float> @sitofpv16i1v16float(<16 x float> %a) { 664 ; SSE2-LABEL: sitofpv16i1v16float 665 ; SSE2: cost of 8 {{.*}} sitofp 666 ; 667 ; AVX1-LABEL: sitofpv16i1v16float 668 ; AVX1: cost of 44 {{.*}} sitofp 669 ; 670 ; AVX2-LABEL: sitofpv16i1v16float 671 ; AVX2: cost of 44 {{.*}} sitofp 672 ; 673 ; AVX512F-LABEL: sitofpv16i1v16float 674 ; AVX512F: cost of 3 {{.*}} sitofp 675 %cmpres = fcmp ogt <16 x float> %a, zeroinitializer 676 %1 = sitofp <16 x i1> %cmpres to <16 x float> 677 ret <16 x float> %1 678 } 679