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