Lines Matching refs:ISD

207   int ISD = TLI->InstructionOpcodeToISD(Opcode);  in getArithmeticInstrCost()  local
208 assert(ISD && "Invalid opcode"); in getArithmeticInstrCost()
210 if (ISD == ISD::MUL && Args.size() == 2 && LT.second.isVector() && in getArithmeticInstrCost()
241 if (ISD == ISD::MUL && in getArithmeticInstrCost()
253 if ((ISD == ISD::SDIV || ISD == ISD::SREM) && in getArithmeticInstrCost()
268 if (ISD == ISD::SREM) { in getArithmeticInstrCost()
280 if ((ISD == ISD::UDIV || ISD == ISD::UREM) && in getArithmeticInstrCost()
284 if (ISD == ISD::UDIV) in getArithmeticInstrCost()
295 { ISD::FDIV, MVT::f32, 18 }, // divss in getArithmeticInstrCost()
296 { ISD::FDIV, MVT::v4f32, 35 }, // divps in getArithmeticInstrCost()
297 { ISD::FDIV, MVT::f64, 33 }, // divsd in getArithmeticInstrCost()
298 { ISD::FDIV, MVT::v2f64, 65 }, // divpd in getArithmeticInstrCost()
302 if (const auto *Entry = CostTableLookup(GLMCostTable, ISD, in getArithmeticInstrCost()
307 { ISD::MUL, MVT::v4i32, 11 }, // pmulld in getArithmeticInstrCost()
308 { ISD::MUL, MVT::v8i16, 2 }, // pmullw in getArithmeticInstrCost()
309 { ISD::FMUL, MVT::f64, 2 }, // mulsd in getArithmeticInstrCost()
310 { ISD::FMUL, MVT::v2f64, 4 }, // mulpd in getArithmeticInstrCost()
311 { ISD::FMUL, MVT::v4f32, 2 }, // mulps in getArithmeticInstrCost()
312 { ISD::FDIV, MVT::f32, 17 }, // divss in getArithmeticInstrCost()
313 { ISD::FDIV, MVT::v4f32, 39 }, // divps in getArithmeticInstrCost()
314 { ISD::FDIV, MVT::f64, 32 }, // divsd in getArithmeticInstrCost()
315 { ISD::FDIV, MVT::v2f64, 69 }, // divpd in getArithmeticInstrCost()
316 { ISD::FADD, MVT::v2f64, 2 }, // addpd in getArithmeticInstrCost()
317 { ISD::FSUB, MVT::v2f64, 2 }, // subpd in getArithmeticInstrCost()
323 { ISD::MUL, MVT::v2i64, 17 }, in getArithmeticInstrCost()
325 { ISD::ADD, MVT::v2i64, 4 }, in getArithmeticInstrCost()
326 { ISD::SUB, MVT::v2i64, 4 }, in getArithmeticInstrCost()
330 if (Args.size() == 2 && ISD == ISD::MUL && LT.second == MVT::v4i32) { in getArithmeticInstrCost()
351 if (const auto *Entry = CostTableLookup(SLMCostTable, ISD, in getArithmeticInstrCost()
358 { ISD::SHL, MVT::v64i8, 2 }, // psllw + pand. in getArithmeticInstrCost()
359 { ISD::SRL, MVT::v64i8, 2 }, // psrlw + pand. in getArithmeticInstrCost()
360 { ISD::SRA, MVT::v64i8, 4 }, // psrlw, pand, pxor, psubb. in getArithmeticInstrCost()
365 if (const auto *Entry = CostTableLookup(AVX512BWUniformConstCostTable, ISD, in getArithmeticInstrCost()
371 { ISD::SRA, MVT::v2i64, 1 }, in getArithmeticInstrCost()
372 { ISD::SRA, MVT::v4i64, 1 }, in getArithmeticInstrCost()
373 { ISD::SRA, MVT::v8i64, 1 }, in getArithmeticInstrCost()
375 { ISD::SHL, MVT::v64i8, 4 }, // psllw + pand. in getArithmeticInstrCost()
376 { ISD::SRL, MVT::v64i8, 4 }, // psrlw + pand. in getArithmeticInstrCost()
377 { ISD::SRA, MVT::v64i8, 8 }, // psrlw, pand, pxor, psubb. in getArithmeticInstrCost()
379 { ISD::SDIV, MVT::v16i32, 6 }, // pmuludq sequence in getArithmeticInstrCost()
380 { ISD::SREM, MVT::v16i32, 8 }, // pmuludq+mul+sub sequence in getArithmeticInstrCost()
381 { ISD::UDIV, MVT::v16i32, 5 }, // pmuludq sequence in getArithmeticInstrCost()
382 { ISD::UREM, MVT::v16i32, 7 }, // pmuludq+mul+sub sequence in getArithmeticInstrCost()
387 if (const auto *Entry = CostTableLookup(AVX512UniformConstCostTable, ISD, in getArithmeticInstrCost()
393 { ISD::SHL, MVT::v32i8, 2 }, // psllw + pand. in getArithmeticInstrCost()
394 { ISD::SRL, MVT::v32i8, 2 }, // psrlw + pand. in getArithmeticInstrCost()
395 { ISD::SRA, MVT::v32i8, 4 }, // psrlw, pand, pxor, psubb. in getArithmeticInstrCost()
397 { ISD::SRA, MVT::v4i64, 4 }, // 2 x psrad + shuffle. in getArithmeticInstrCost()
399 { ISD::SDIV, MVT::v8i32, 6 }, // pmuludq sequence in getArithmeticInstrCost()
400 { ISD::SREM, MVT::v8i32, 8 }, // pmuludq+mul+sub sequence in getArithmeticInstrCost()
401 { ISD::UDIV, MVT::v8i32, 5 }, // pmuludq sequence in getArithmeticInstrCost()
402 { ISD::UREM, MVT::v8i32, 7 }, // pmuludq+mul+sub sequence in getArithmeticInstrCost()
407 if (const auto *Entry = CostTableLookup(AVX2UniformConstCostTable, ISD, in getArithmeticInstrCost()
413 { ISD::SHL, MVT::v16i8, 2 }, // psllw + pand. in getArithmeticInstrCost()
414 { ISD::SRL, MVT::v16i8, 2 }, // psrlw + pand. in getArithmeticInstrCost()
415 { ISD::SRA, MVT::v16i8, 4 }, // psrlw, pand, pxor, psubb. in getArithmeticInstrCost()
417 { ISD::SHL, MVT::v32i8, 4+2 }, // 2*(psllw + pand) + split. in getArithmeticInstrCost()
418 { ISD::SRL, MVT::v32i8, 4+2 }, // 2*(psrlw + pand) + split. in getArithmeticInstrCost()
419 { ISD::SRA, MVT::v32i8, 8+2 }, // 2*(psrlw, pand, pxor, psubb) + split. in getArithmeticInstrCost()
421 { ISD::SDIV, MVT::v8i32, 12+2 }, // 2*pmuludq sequence + split. in getArithmeticInstrCost()
422 { ISD::SREM, MVT::v8i32, 16+2 }, // 2*pmuludq+mul+sub sequence + split. in getArithmeticInstrCost()
423 { ISD::SDIV, MVT::v4i32, 6 }, // pmuludq sequence in getArithmeticInstrCost()
424 { ISD::SREM, MVT::v4i32, 8 }, // pmuludq+mul+sub sequence in getArithmeticInstrCost()
425 { ISD::UDIV, MVT::v8i32, 10+2 }, // 2*pmuludq sequence + split. in getArithmeticInstrCost()
426 { ISD::UREM, MVT::v8i32, 14+2 }, // 2*pmuludq+mul+sub sequence + split. in getArithmeticInstrCost()
427 { ISD::UDIV, MVT::v4i32, 5 }, // pmuludq sequence in getArithmeticInstrCost()
428 { ISD::UREM, MVT::v4i32, 7 }, // pmuludq+mul+sub sequence in getArithmeticInstrCost()
435 CostTableLookup(SSE2UniformConstCostTable, ISD, LT.second)) in getArithmeticInstrCost()
440 { ISD::SDIV, MVT::v64i8, 14 }, // 2*ext+2*pmulhw sequence in getArithmeticInstrCost()
441 { ISD::SREM, MVT::v64i8, 16 }, // 2*ext+2*pmulhw+mul+sub sequence in getArithmeticInstrCost()
442 { ISD::UDIV, MVT::v64i8, 14 }, // 2*ext+2*pmulhw sequence in getArithmeticInstrCost()
443 { ISD::UREM, MVT::v64i8, 16 }, // 2*ext+2*pmulhw+mul+sub sequence in getArithmeticInstrCost()
444 { ISD::SDIV, MVT::v32i16, 6 }, // vpmulhw sequence in getArithmeticInstrCost()
445 { ISD::SREM, MVT::v32i16, 8 }, // vpmulhw+mul+sub sequence in getArithmeticInstrCost()
446 { ISD::UDIV, MVT::v32i16, 6 }, // vpmulhuw sequence in getArithmeticInstrCost()
447 { ISD::UREM, MVT::v32i16, 8 }, // vpmulhuw+mul+sub sequence in getArithmeticInstrCost()
454 CostTableLookup(AVX512BWConstCostTable, ISD, LT.second)) in getArithmeticInstrCost()
459 { ISD::SDIV, MVT::v16i32, 15 }, // vpmuldq sequence in getArithmeticInstrCost()
460 { ISD::SREM, MVT::v16i32, 17 }, // vpmuldq+mul+sub sequence in getArithmeticInstrCost()
461 { ISD::UDIV, MVT::v16i32, 15 }, // vpmuludq sequence in getArithmeticInstrCost()
462 { ISD::UREM, MVT::v16i32, 17 }, // vpmuludq+mul+sub sequence in getArithmeticInstrCost()
463 { ISD::SDIV, MVT::v64i8, 28 }, // 4*ext+4*pmulhw sequence in getArithmeticInstrCost()
464 { ISD::SREM, MVT::v64i8, 32 }, // 4*ext+4*pmulhw+mul+sub sequence in getArithmeticInstrCost()
465 { ISD::UDIV, MVT::v64i8, 28 }, // 4*ext+4*pmulhw sequence in getArithmeticInstrCost()
466 { ISD::UREM, MVT::v64i8, 32 }, // 4*ext+4*pmulhw+mul+sub sequence in getArithmeticInstrCost()
467 { ISD::SDIV, MVT::v32i16, 12 }, // 2*vpmulhw sequence in getArithmeticInstrCost()
468 { ISD::SREM, MVT::v32i16, 16 }, // 2*vpmulhw+mul+sub sequence in getArithmeticInstrCost()
469 { ISD::UDIV, MVT::v32i16, 12 }, // 2*vpmulhuw sequence in getArithmeticInstrCost()
470 { ISD::UREM, MVT::v32i16, 16 }, // 2*vpmulhuw+mul+sub sequence in getArithmeticInstrCost()
477 CostTableLookup(AVX512ConstCostTable, ISD, LT.second)) in getArithmeticInstrCost()
482 { ISD::SDIV, MVT::v32i8, 14 }, // 2*ext+2*pmulhw sequence in getArithmeticInstrCost()
483 { ISD::SREM, MVT::v32i8, 16 }, // 2*ext+2*pmulhw+mul+sub sequence in getArithmeticInstrCost()
484 { ISD::UDIV, MVT::v32i8, 14 }, // 2*ext+2*pmulhw sequence in getArithmeticInstrCost()
485 { ISD::UREM, MVT::v32i8, 16 }, // 2*ext+2*pmulhw+mul+sub sequence in getArithmeticInstrCost()
486 { ISD::SDIV, MVT::v16i16, 6 }, // vpmulhw sequence in getArithmeticInstrCost()
487 { ISD::SREM, MVT::v16i16, 8 }, // vpmulhw+mul+sub sequence in getArithmeticInstrCost()
488 { ISD::UDIV, MVT::v16i16, 6 }, // vpmulhuw sequence in getArithmeticInstrCost()
489 { ISD::UREM, MVT::v16i16, 8 }, // vpmulhuw+mul+sub sequence in getArithmeticInstrCost()
490 { ISD::SDIV, MVT::v8i32, 15 }, // vpmuldq sequence in getArithmeticInstrCost()
491 { ISD::SREM, MVT::v8i32, 19 }, // vpmuldq+mul+sub sequence in getArithmeticInstrCost()
492 { ISD::UDIV, MVT::v8i32, 15 }, // vpmuludq sequence in getArithmeticInstrCost()
493 { ISD::UREM, MVT::v8i32, 19 }, // vpmuludq+mul+sub sequence in getArithmeticInstrCost()
499 if (const auto *Entry = CostTableLookup(AVX2ConstCostTable, ISD, LT.second)) in getArithmeticInstrCost()
504 { ISD::SDIV, MVT::v32i8, 28+2 }, // 4*ext+4*pmulhw sequence + split. in getArithmeticInstrCost()
505 { ISD::SREM, MVT::v32i8, 32+2 }, // 4*ext+4*pmulhw+mul+sub sequence + split. in getArithmeticInstrCost()
506 { ISD::SDIV, MVT::v16i8, 14 }, // 2*ext+2*pmulhw sequence in getArithmeticInstrCost()
507 { ISD::SREM, MVT::v16i8, 16 }, // 2*ext+2*pmulhw+mul+sub sequence in getArithmeticInstrCost()
508 { ISD::UDIV, MVT::v32i8, 28+2 }, // 4*ext+4*pmulhw sequence + split. in getArithmeticInstrCost()
509 { ISD::UREM, MVT::v32i8, 32+2 }, // 4*ext+4*pmulhw+mul+sub sequence + split. in getArithmeticInstrCost()
510 { ISD::UDIV, MVT::v16i8, 14 }, // 2*ext+2*pmulhw sequence in getArithmeticInstrCost()
511 { ISD::UREM, MVT::v16i8, 16 }, // 2*ext+2*pmulhw+mul+sub sequence in getArithmeticInstrCost()
512 { ISD::SDIV, MVT::v16i16, 12+2 }, // 2*pmulhw sequence + split. in getArithmeticInstrCost()
513 { ISD::SREM, MVT::v16i16, 16+2 }, // 2*pmulhw+mul+sub sequence + split. in getArithmeticInstrCost()
514 { ISD::SDIV, MVT::v8i16, 6 }, // pmulhw sequence in getArithmeticInstrCost()
515 { ISD::SREM, MVT::v8i16, 8 }, // pmulhw+mul+sub sequence in getArithmeticInstrCost()
516 { ISD::UDIV, MVT::v16i16, 12+2 }, // 2*pmulhuw sequence + split. in getArithmeticInstrCost()
517 { ISD::UREM, MVT::v16i16, 16+2 }, // 2*pmulhuw+mul+sub sequence + split. in getArithmeticInstrCost()
518 { ISD::UDIV, MVT::v8i16, 6 }, // pmulhuw sequence in getArithmeticInstrCost()
519 { ISD::UREM, MVT::v8i16, 8 }, // pmulhuw+mul+sub sequence in getArithmeticInstrCost()
520 { ISD::SDIV, MVT::v8i32, 38+2 }, // 2*pmuludq sequence + split. in getArithmeticInstrCost()
521 { ISD::SREM, MVT::v8i32, 48+2 }, // 2*pmuludq+mul+sub sequence + split. in getArithmeticInstrCost()
522 { ISD::SDIV, MVT::v4i32, 19 }, // pmuludq sequence in getArithmeticInstrCost()
523 { ISD::SREM, MVT::v4i32, 24 }, // pmuludq+mul+sub sequence in getArithmeticInstrCost()
524 { ISD::UDIV, MVT::v8i32, 30+2 }, // 2*pmuludq sequence + split. in getArithmeticInstrCost()
525 { ISD::UREM, MVT::v8i32, 40+2 }, // 2*pmuludq+mul+sub sequence + split. in getArithmeticInstrCost()
526 { ISD::UDIV, MVT::v4i32, 15 }, // pmuludq sequence in getArithmeticInstrCost()
527 { ISD::UREM, MVT::v4i32, 20 }, // pmuludq+mul+sub sequence in getArithmeticInstrCost()
534 if (ISD == ISD::SDIV && LT.second == MVT::v8i32 && ST->hasAVX()) in getArithmeticInstrCost()
536 if (ISD == ISD::SREM && LT.second == MVT::v8i32 && ST->hasAVX()) in getArithmeticInstrCost()
538 if (ISD == ISD::SDIV && LT.second == MVT::v4i32 && ST->hasSSE41()) in getArithmeticInstrCost()
540 if (ISD == ISD::SREM && LT.second == MVT::v4i32 && ST->hasSSE41()) in getArithmeticInstrCost()
543 if (const auto *Entry = CostTableLookup(SSE2ConstCostTable, ISD, LT.second)) in getArithmeticInstrCost()
548 { ISD::SHL, MVT::v16i8, 4 }, // extend/vpsllvw/pack sequence. in getArithmeticInstrCost()
549 { ISD::SRL, MVT::v16i8, 4 }, // extend/vpsrlvw/pack sequence. in getArithmeticInstrCost()
550 { ISD::SRA, MVT::v16i8, 4 }, // extend/vpsravw/pack sequence. in getArithmeticInstrCost()
551 { ISD::SHL, MVT::v32i8, 4 }, // extend/vpsllvw/pack sequence. in getArithmeticInstrCost()
552 { ISD::SRL, MVT::v32i8, 4 }, // extend/vpsrlvw/pack sequence. in getArithmeticInstrCost()
553 { ISD::SRA, MVT::v32i8, 6 }, // extend/vpsravw/pack sequence. in getArithmeticInstrCost()
554 { ISD::SHL, MVT::v64i8, 6 }, // extend/vpsllvw/pack sequence. in getArithmeticInstrCost()
555 { ISD::SRL, MVT::v64i8, 7 }, // extend/vpsrlvw/pack sequence. in getArithmeticInstrCost()
556 { ISD::SRA, MVT::v64i8, 15 }, // extend/vpsravw/pack sequence. in getArithmeticInstrCost()
558 { ISD::SHL, MVT::v8i16, 1 }, // vpsllvw in getArithmeticInstrCost()
559 { ISD::SRL, MVT::v8i16, 1 }, // vpsrlvw in getArithmeticInstrCost()
560 { ISD::SRA, MVT::v8i16, 1 }, // vpsravw in getArithmeticInstrCost()
561 { ISD::SHL, MVT::v16i16, 1 }, // vpsllvw in getArithmeticInstrCost()
562 { ISD::SRL, MVT::v16i16, 1 }, // vpsrlvw in getArithmeticInstrCost()
563 { ISD::SRA, MVT::v16i16, 1 }, // vpsravw in getArithmeticInstrCost()
564 { ISD::SHL, MVT::v32i16, 1 }, // vpsllvw in getArithmeticInstrCost()
565 { ISD::SRL, MVT::v32i16, 1 }, // vpsrlvw in getArithmeticInstrCost()
566 { ISD::SRA, MVT::v32i16, 1 }, // vpsravw in getArithmeticInstrCost()
570 if (const auto *Entry = CostTableLookup(AVX512BWShiftCostTable, ISD, LT.second)) in getArithmeticInstrCost()
575 { ISD::SHL, MVT::v16i16, 1 }, // psllw. in getArithmeticInstrCost()
576 { ISD::SRL, MVT::v16i16, 1 }, // psrlw. in getArithmeticInstrCost()
577 { ISD::SRA, MVT::v16i16, 1 }, // psraw. in getArithmeticInstrCost()
578 { ISD::SHL, MVT::v32i16, 2 }, // 2*psllw. in getArithmeticInstrCost()
579 { ISD::SRL, MVT::v32i16, 2 }, // 2*psrlw. in getArithmeticInstrCost()
580 { ISD::SRA, MVT::v32i16, 2 }, // 2*psraw. in getArithmeticInstrCost()
582 { ISD::SHL, MVT::v8i32, 1 }, // pslld in getArithmeticInstrCost()
583 { ISD::SRL, MVT::v8i32, 1 }, // psrld in getArithmeticInstrCost()
584 { ISD::SRA, MVT::v8i32, 1 }, // psrad in getArithmeticInstrCost()
585 { ISD::SHL, MVT::v4i64, 1 }, // psllq in getArithmeticInstrCost()
586 { ISD::SRL, MVT::v4i64, 1 }, // psrlq in getArithmeticInstrCost()
593 CostTableLookup(AVX2UniformCostTable, ISD, LT.second)) in getArithmeticInstrCost()
599 { ISD::SHL, MVT::v8i16, 1 }, // psllw. in getArithmeticInstrCost()
600 { ISD::SHL, MVT::v4i32, 1 }, // pslld in getArithmeticInstrCost()
601 { ISD::SHL, MVT::v2i64, 1 }, // psllq. in getArithmeticInstrCost()
603 { ISD::SRL, MVT::v8i16, 1 }, // psrlw. in getArithmeticInstrCost()
604 { ISD::SRL, MVT::v4i32, 1 }, // psrld. in getArithmeticInstrCost()
605 { ISD::SRL, MVT::v2i64, 1 }, // psrlq. in getArithmeticInstrCost()
607 { ISD::SRA, MVT::v8i16, 1 }, // psraw. in getArithmeticInstrCost()
608 { ISD::SRA, MVT::v4i32, 1 }, // psrad. in getArithmeticInstrCost()
615 CostTableLookup(SSE2UniformCostTable, ISD, LT.second)) in getArithmeticInstrCost()
620 { ISD::MUL, MVT::v2i64, 2 }, // pmullq in getArithmeticInstrCost()
621 { ISD::MUL, MVT::v4i64, 2 }, // pmullq in getArithmeticInstrCost()
622 { ISD::MUL, MVT::v8i64, 2 } // pmullq in getArithmeticInstrCost()
627 if (const auto *Entry = CostTableLookup(AVX512DQCostTable, ISD, LT.second)) in getArithmeticInstrCost()
631 { ISD::SHL, MVT::v64i8, 11 }, // vpblendvb sequence. in getArithmeticInstrCost()
632 { ISD::SRL, MVT::v64i8, 11 }, // vpblendvb sequence. in getArithmeticInstrCost()
633 { ISD::SRA, MVT::v64i8, 24 }, // vpblendvb sequence. in getArithmeticInstrCost()
638 if (const auto *Entry = CostTableLookup(AVX512BWCostTable, ISD, LT.second)) in getArithmeticInstrCost()
642 { ISD::SHL, MVT::v4i32, 1 }, in getArithmeticInstrCost()
643 { ISD::SRL, MVT::v4i32, 1 }, in getArithmeticInstrCost()
644 { ISD::SRA, MVT::v4i32, 1 }, in getArithmeticInstrCost()
645 { ISD::SHL, MVT::v8i32, 1 }, in getArithmeticInstrCost()
646 { ISD::SRL, MVT::v8i32, 1 }, in getArithmeticInstrCost()
647 { ISD::SRA, MVT::v8i32, 1 }, in getArithmeticInstrCost()
648 { ISD::SHL, MVT::v16i32, 1 }, in getArithmeticInstrCost()
649 { ISD::SRL, MVT::v16i32, 1 }, in getArithmeticInstrCost()
650 { ISD::SRA, MVT::v16i32, 1 }, in getArithmeticInstrCost()
652 { ISD::SHL, MVT::v2i64, 1 }, in getArithmeticInstrCost()
653 { ISD::SRL, MVT::v2i64, 1 }, in getArithmeticInstrCost()
654 { ISD::SHL, MVT::v4i64, 1 }, in getArithmeticInstrCost()
655 { ISD::SRL, MVT::v4i64, 1 }, in getArithmeticInstrCost()
656 { ISD::SHL, MVT::v8i64, 1 }, in getArithmeticInstrCost()
657 { ISD::SRL, MVT::v8i64, 1 }, in getArithmeticInstrCost()
659 { ISD::SRA, MVT::v2i64, 1 }, in getArithmeticInstrCost()
660 { ISD::SRA, MVT::v4i64, 1 }, in getArithmeticInstrCost()
661 { ISD::SRA, MVT::v8i64, 1 }, in getArithmeticInstrCost()
663 { ISD::MUL, MVT::v16i32, 1 }, // pmulld (Skylake from agner.org) in getArithmeticInstrCost()
664 { ISD::MUL, MVT::v8i32, 1 }, // pmulld (Skylake from agner.org) in getArithmeticInstrCost()
665 { ISD::MUL, MVT::v4i32, 1 }, // pmulld (Skylake from agner.org) in getArithmeticInstrCost()
666 { ISD::MUL, MVT::v8i64, 6 }, // 3*pmuludq/3*shift/2*add in getArithmeticInstrCost()
667 { ISD::MUL, MVT::i64, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
669 { ISD::FNEG, MVT::v8f64, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
670 { ISD::FADD, MVT::v8f64, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
671 { ISD::FSUB, MVT::v8f64, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
672 { ISD::FMUL, MVT::v8f64, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
673 { ISD::FDIV, MVT::f64, 4 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
674 { ISD::FDIV, MVT::v2f64, 4 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
675 { ISD::FDIV, MVT::v4f64, 8 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
676 { ISD::FDIV, MVT::v8f64, 16 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
678 { ISD::FNEG, MVT::v16f32, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
679 { ISD::FADD, MVT::v16f32, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
680 { ISD::FSUB, MVT::v16f32, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
681 { ISD::FMUL, MVT::v16f32, 1 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
682 { ISD::FDIV, MVT::f32, 3 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
683 { ISD::FDIV, MVT::v4f32, 3 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
684 { ISD::FDIV, MVT::v8f32, 5 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
685 { ISD::FDIV, MVT::v16f32, 10 }, // Skylake from http://www.agner.org/ in getArithmeticInstrCost()
689 if (const auto *Entry = CostTableLookup(AVX512CostTable, ISD, LT.second)) in getArithmeticInstrCost()
695 { ISD::SHL, MVT::v4i32, 2 }, // vpsllvd (Haswell from agner.org) in getArithmeticInstrCost()
696 { ISD::SRL, MVT::v4i32, 2 }, // vpsrlvd (Haswell from agner.org) in getArithmeticInstrCost()
697 { ISD::SRA, MVT::v4i32, 2 }, // vpsravd (Haswell from agner.org) in getArithmeticInstrCost()
698 { ISD::SHL, MVT::v8i32, 2 }, // vpsllvd (Haswell from agner.org) in getArithmeticInstrCost()
699 { ISD::SRL, MVT::v8i32, 2 }, // vpsrlvd (Haswell from agner.org) in getArithmeticInstrCost()
700 { ISD::SRA, MVT::v8i32, 2 }, // vpsravd (Haswell from agner.org) in getArithmeticInstrCost()
701 { ISD::SHL, MVT::v2i64, 1 }, // vpsllvq (Haswell from agner.org) in getArithmeticInstrCost()
702 { ISD::SRL, MVT::v2i64, 1 }, // vpsrlvq (Haswell from agner.org) in getArithmeticInstrCost()
703 { ISD::SHL, MVT::v4i64, 1 }, // vpsllvq (Haswell from agner.org) in getArithmeticInstrCost()
704 { ISD::SRL, MVT::v4i64, 1 }, // vpsrlvq (Haswell from agner.org) in getArithmeticInstrCost()
708 if (ISD == ISD::SHL && LT.second == MVT::v32i16 && in getArithmeticInstrCost()
721 if (ISD == ISD::SHL && LT.second == MVT::v16i16 && in getArithmeticInstrCost()
731 if (const auto *Entry = CostTableLookup(AVX2ShiftCostTable, ISD, LT.second)) in getArithmeticInstrCost()
737 { ISD::SHL, MVT::v16i8, 1 }, in getArithmeticInstrCost()
738 { ISD::SRL, MVT::v16i8, 2 }, in getArithmeticInstrCost()
739 { ISD::SRA, MVT::v16i8, 2 }, in getArithmeticInstrCost()
740 { ISD::SHL, MVT::v8i16, 1 }, in getArithmeticInstrCost()
741 { ISD::SRL, MVT::v8i16, 2 }, in getArithmeticInstrCost()
742 { ISD::SRA, MVT::v8i16, 2 }, in getArithmeticInstrCost()
743 { ISD::SHL, MVT::v4i32, 1 }, in getArithmeticInstrCost()
744 { ISD::SRL, MVT::v4i32, 2 }, in getArithmeticInstrCost()
745 { ISD::SRA, MVT::v4i32, 2 }, in getArithmeticInstrCost()
746 { ISD::SHL, MVT::v2i64, 1 }, in getArithmeticInstrCost()
747 { ISD::SRL, MVT::v2i64, 2 }, in getArithmeticInstrCost()
748 { ISD::SRA, MVT::v2i64, 2 }, in getArithmeticInstrCost()
750 { ISD::SHL, MVT::v32i8, 2+2 }, in getArithmeticInstrCost()
751 { ISD::SRL, MVT::v32i8, 4+2 }, in getArithmeticInstrCost()
752 { ISD::SRA, MVT::v32i8, 4+2 }, in getArithmeticInstrCost()
753 { ISD::SHL, MVT::v16i16, 2+2 }, in getArithmeticInstrCost()
754 { ISD::SRL, MVT::v16i16, 4+2 }, in getArithmeticInstrCost()
755 { ISD::SRA, MVT::v16i16, 4+2 }, in getArithmeticInstrCost()
756 { ISD::SHL, MVT::v8i32, 2+2 }, in getArithmeticInstrCost()
757 { ISD::SRL, MVT::v8i32, 4+2 }, in getArithmeticInstrCost()
758 { ISD::SRA, MVT::v8i32, 4+2 }, in getArithmeticInstrCost()
759 { ISD::SHL, MVT::v4i64, 2+2 }, in getArithmeticInstrCost()
760 { ISD::SRL, MVT::v4i64, 4+2 }, in getArithmeticInstrCost()
761 { ISD::SRA, MVT::v4i64, 4+2 }, in getArithmeticInstrCost()
768 int ShiftISD = ISD; in getArithmeticInstrCost()
769 if ((ShiftISD == ISD::SRL || ShiftISD == ISD::SRA) && in getArithmeticInstrCost()
772 ShiftISD = ISD::SHL; in getArithmeticInstrCost()
780 { ISD::SHL, MVT::v16i16, 2+2 }, // 2*psllw + split. in getArithmeticInstrCost()
781 { ISD::SHL, MVT::v8i32, 2+2 }, // 2*pslld + split. in getArithmeticInstrCost()
782 { ISD::SHL, MVT::v4i64, 2+2 }, // 2*psllq + split. in getArithmeticInstrCost()
784 { ISD::SRL, MVT::v16i16, 2+2 }, // 2*psrlw + split. in getArithmeticInstrCost()
785 { ISD::SRL, MVT::v8i32, 2+2 }, // 2*psrld + split. in getArithmeticInstrCost()
786 { ISD::SRL, MVT::v4i64, 2+2 }, // 2*psrlq + split. in getArithmeticInstrCost()
788 { ISD::SRA, MVT::v16i16, 2+2 }, // 2*psraw + split. in getArithmeticInstrCost()
789 { ISD::SRA, MVT::v8i32, 2+2 }, // 2*psrad + split. in getArithmeticInstrCost()
790 { ISD::SRA, MVT::v2i64, 4 }, // 2*psrad + shuffle. in getArithmeticInstrCost()
791 { ISD::SRA, MVT::v4i64, 8+2 }, // 2*(2*psrad + shuffle) + split. in getArithmeticInstrCost()
799 if (ISD == ISD::SRA && LT.second == MVT::v4i64 && ST->hasAVX2()) in getArithmeticInstrCost()
803 CostTableLookup(SSE2UniformShiftCostTable, ISD, LT.second)) in getArithmeticInstrCost()
807 if (ISD == ISD::SHL && in getArithmeticInstrCost()
814 ISD = ISD::MUL; in getArithmeticInstrCost()
818 { ISD::SHL, MVT::v16i8, 6 }, // vpblendvb sequence. in getArithmeticInstrCost()
819 { ISD::SHL, MVT::v32i8, 6 }, // vpblendvb sequence. in getArithmeticInstrCost()
820 { ISD::SHL, MVT::v64i8, 12 }, // 2*vpblendvb sequence. in getArithmeticInstrCost()
821 { ISD::SHL, MVT::v8i16, 5 }, // extend/vpsrlvd/pack sequence. in getArithmeticInstrCost()
822 { ISD::SHL, MVT::v16i16, 7 }, // extend/vpsrlvd/pack sequence. in getArithmeticInstrCost()
823 { ISD::SHL, MVT::v32i16, 14 }, // 2*extend/vpsrlvd/pack sequence. in getArithmeticInstrCost()
825 { ISD::SRL, MVT::v16i8, 6 }, // vpblendvb sequence. in getArithmeticInstrCost()
826 { ISD::SRL, MVT::v32i8, 6 }, // vpblendvb sequence. in getArithmeticInstrCost()
827 { ISD::SRL, MVT::v64i8, 12 }, // 2*vpblendvb sequence. in getArithmeticInstrCost()
828 { ISD::SRL, MVT::v8i16, 5 }, // extend/vpsrlvd/pack sequence. in getArithmeticInstrCost()
829 { ISD::SRL, MVT::v16i16, 7 }, // extend/vpsrlvd/pack sequence. in getArithmeticInstrCost()
830 { ISD::SRL, MVT::v32i16, 14 }, // 2*extend/vpsrlvd/pack sequence. in getArithmeticInstrCost()
832 { ISD::SRA, MVT::v16i8, 17 }, // vpblendvb sequence. in getArithmeticInstrCost()
833 { ISD::SRA, MVT::v32i8, 17 }, // vpblendvb sequence. in getArithmeticInstrCost()
834 { ISD::SRA, MVT::v64i8, 34 }, // 2*vpblendvb sequence. in getArithmeticInstrCost()
835 { ISD::SRA, MVT::v8i16, 5 }, // extend/vpsravd/pack sequence. in getArithmeticInstrCost()
836 { ISD::SRA, MVT::v16i16, 7 }, // extend/vpsravd/pack sequence. in getArithmeticInstrCost()
837 { ISD::SRA, MVT::v32i16, 14 }, // 2*extend/vpsravd/pack sequence. in getArithmeticInstrCost()
838 { ISD::SRA, MVT::v2i64, 2 }, // srl/xor/sub sequence. in getArithmeticInstrCost()
839 { ISD::SRA, MVT::v4i64, 2 }, // srl/xor/sub sequence. in getArithmeticInstrCost()
841 { ISD::SUB, MVT::v32i8, 1 }, // psubb in getArithmeticInstrCost()
842 { ISD::ADD, MVT::v32i8, 1 }, // paddb in getArithmeticInstrCost()
843 { ISD::SUB, MVT::v16i16, 1 }, // psubw in getArithmeticInstrCost()
844 { ISD::ADD, MVT::v16i16, 1 }, // paddw in getArithmeticInstrCost()
845 { ISD::SUB, MVT::v8i32, 1 }, // psubd in getArithmeticInstrCost()
846 { ISD::ADD, MVT::v8i32, 1 }, // paddd in getArithmeticInstrCost()
847 { ISD::SUB, MVT::v4i64, 1 }, // psubq in getArithmeticInstrCost()
848 { ISD::ADD, MVT::v4i64, 1 }, // paddq in getArithmeticInstrCost()
850 { ISD::MUL, MVT::v16i16, 1 }, // pmullw in getArithmeticInstrCost()
851 { ISD::MUL, MVT::v8i32, 2 }, // pmulld (Haswell from agner.org) in getArithmeticInstrCost()
852 { ISD::MUL, MVT::v4i64, 6 }, // 3*pmuludq/3*shift/2*add in getArithmeticInstrCost()
854 { ISD::FNEG, MVT::v4f64, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
855 { ISD::FNEG, MVT::v8f32, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
856 { ISD::FADD, MVT::v4f64, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
857 { ISD::FADD, MVT::v8f32, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
858 { ISD::FSUB, MVT::v4f64, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
859 { ISD::FSUB, MVT::v8f32, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
860 { ISD::FMUL, MVT::f64, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
861 { ISD::FMUL, MVT::v2f64, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
862 { ISD::FMUL, MVT::v4f64, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
863 { ISD::FMUL, MVT::v8f32, 1 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
865 { ISD::FDIV, MVT::f32, 7 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
866 { ISD::FDIV, MVT::v4f32, 7 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
867 { ISD::FDIV, MVT::v8f32, 14 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
868 { ISD::FDIV, MVT::f64, 14 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
869 { ISD::FDIV, MVT::v2f64, 14 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
870 { ISD::FDIV, MVT::v4f64, 28 }, // Haswell from http://www.agner.org/ in getArithmeticInstrCost()
875 if (const auto *Entry = CostTableLookup(AVX2CostTable, ISD, LT.second)) in getArithmeticInstrCost()
882 { ISD::MUL, MVT::v16i16, 4 }, in getArithmeticInstrCost()
883 { ISD::MUL, MVT::v8i32, 5 }, // BTVER2 from http://www.agner.org/ in getArithmeticInstrCost()
884 { ISD::MUL, MVT::v4i64, 12 }, in getArithmeticInstrCost()
886 { ISD::SUB, MVT::v32i8, 4 }, in getArithmeticInstrCost()
887 { ISD::ADD, MVT::v32i8, 4 }, in getArithmeticInstrCost()
888 { ISD::SUB, MVT::v16i16, 4 }, in getArithmeticInstrCost()
889 { ISD::ADD, MVT::v16i16, 4 }, in getArithmeticInstrCost()
890 { ISD::SUB, MVT::v8i32, 4 }, in getArithmeticInstrCost()
891 { ISD::ADD, MVT::v8i32, 4 }, in getArithmeticInstrCost()
892 { ISD::SUB, MVT::v4i64, 4 }, in getArithmeticInstrCost()
893 { ISD::ADD, MVT::v4i64, 4 }, in getArithmeticInstrCost()
895 { ISD::SHL, MVT::v32i8, 22 }, // pblendvb sequence + split. in getArithmeticInstrCost()
896 { ISD::SHL, MVT::v8i16, 6 }, // pblendvb sequence. in getArithmeticInstrCost()
897 { ISD::SHL, MVT::v16i16, 13 }, // pblendvb sequence + split. in getArithmeticInstrCost()
898 { ISD::SHL, MVT::v4i32, 3 }, // pslld/paddd/cvttps2dq/pmulld in getArithmeticInstrCost()
899 { ISD::SHL, MVT::v8i32, 9 }, // pslld/paddd/cvttps2dq/pmulld + split in getArithmeticInstrCost()
900 { ISD::SHL, MVT::v2i64, 2 }, // Shift each lane + blend. in getArithmeticInstrCost()
901 { ISD::SHL, MVT::v4i64, 6 }, // Shift each lane + blend + split. in getArithmeticInstrCost()
903 { ISD::SRL, MVT::v32i8, 23 }, // pblendvb sequence + split. in getArithmeticInstrCost()
904 { ISD::SRL, MVT::v16i16, 28 }, // pblendvb sequence + split. in getArithmeticInstrCost()
905 { ISD::SRL, MVT::v4i32, 6 }, // Shift each lane + blend. in getArithmeticInstrCost()
906 { ISD::SRL, MVT::v8i32, 14 }, // Shift each lane + blend + split. in getArithmeticInstrCost()
907 { ISD::SRL, MVT::v2i64, 2 }, // Shift each lane + blend. in getArithmeticInstrCost()
908 { ISD::SRL, MVT::v4i64, 6 }, // Shift each lane + blend + split. in getArithmeticInstrCost()
910 { ISD::SRA, MVT::v32i8, 44 }, // pblendvb sequence + split. in getArithmeticInstrCost()
911 { ISD::SRA, MVT::v16i16, 28 }, // pblendvb sequence + split. in getArithmeticInstrCost()
912 { ISD::SRA, MVT::v4i32, 6 }, // Shift each lane + blend. in getArithmeticInstrCost()
913 { ISD::SRA, MVT::v8i32, 14 }, // Shift each lane + blend + split. in getArithmeticInstrCost()
914 { ISD::SRA, MVT::v2i64, 5 }, // Shift each lane + blend. in getArithmeticInstrCost()
915 { ISD::SRA, MVT::v4i64, 12 }, // Shift each lane + blend + split. in getArithmeticInstrCost()
917 { ISD::FNEG, MVT::v4f64, 2 }, // BTVER2 from http://www.agner.org/ in getArithmeticInstrCost()
918 { ISD::FNEG, MVT::v8f32, 2 }, // BTVER2 from http://www.agner.org/ in getArithmeticInstrCost()
920 { ISD::FMUL, MVT::f64, 2 }, // BTVER2 from http://www.agner.org/ in getArithmeticInstrCost()
921 { ISD::FMUL, MVT::v2f64, 2 }, // BTVER2 from http://www.agner.org/ in getArithmeticInstrCost()
922 { ISD::FMUL, MVT::v4f64, 4 }, // BTVER2 from http://www.agner.org/ in getArithmeticInstrCost()
924 { ISD::FDIV, MVT::f32, 14 }, // SNB from http://www.agner.org/ in getArithmeticInstrCost()
925 { ISD::FDIV, MVT::v4f32, 14 }, // SNB from http://www.agner.org/ in getArithmeticInstrCost()
926 { ISD::FDIV, MVT::v8f32, 28 }, // SNB from http://www.agner.org/ in getArithmeticInstrCost()
927 { ISD::FDIV, MVT::f64, 22 }, // SNB from http://www.agner.org/ in getArithmeticInstrCost()
928 { ISD::FDIV, MVT::v2f64, 22 }, // SNB from http://www.agner.org/ in getArithmeticInstrCost()
929 { ISD::FDIV, MVT::v4f64, 44 }, // SNB from http://www.agner.org/ in getArithmeticInstrCost()
933 if (const auto *Entry = CostTableLookup(AVX1CostTable, ISD, LT.second)) in getArithmeticInstrCost()
937 { ISD::FADD, MVT::f64, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
938 { ISD::FADD, MVT::f32, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
939 { ISD::FADD, MVT::v2f64, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
940 { ISD::FADD, MVT::v4f32, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
942 { ISD::FSUB, MVT::f64, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
943 { ISD::FSUB, MVT::f32 , 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
944 { ISD::FSUB, MVT::v2f64, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
945 { ISD::FSUB, MVT::v4f32, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
947 { ISD::FMUL, MVT::f64, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
948 { ISD::FMUL, MVT::f32, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
949 { ISD::FMUL, MVT::v2f64, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
950 { ISD::FMUL, MVT::v4f32, 1 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
952 { ISD::FDIV, MVT::f32, 14 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
953 { ISD::FDIV, MVT::v4f32, 14 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
954 { ISD::FDIV, MVT::f64, 22 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
955 { ISD::FDIV, MVT::v2f64, 22 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
957 { ISD::MUL, MVT::v2i64, 6 } // 3*pmuludq/3*shift/2*add in getArithmeticInstrCost()
961 if (const auto *Entry = CostTableLookup(SSE42CostTable, ISD, LT.second)) in getArithmeticInstrCost()
965 { ISD::SHL, MVT::v16i8, 10 }, // pblendvb sequence. in getArithmeticInstrCost()
966 { ISD::SHL, MVT::v8i16, 11 }, // pblendvb sequence. in getArithmeticInstrCost()
967 { ISD::SHL, MVT::v4i32, 4 }, // pslld/paddd/cvttps2dq/pmulld in getArithmeticInstrCost()
969 { ISD::SRL, MVT::v16i8, 11 }, // pblendvb sequence. in getArithmeticInstrCost()
970 { ISD::SRL, MVT::v8i16, 13 }, // pblendvb sequence. in getArithmeticInstrCost()
971 { ISD::SRL, MVT::v4i32, 16 }, // Shift each lane + blend. in getArithmeticInstrCost()
973 { ISD::SRA, MVT::v16i8, 21 }, // pblendvb sequence. in getArithmeticInstrCost()
974 { ISD::SRA, MVT::v8i16, 13 }, // pblendvb sequence. in getArithmeticInstrCost()
976 { ISD::MUL, MVT::v4i32, 2 } // pmulld (Nehalem from agner.org) in getArithmeticInstrCost()
980 if (const auto *Entry = CostTableLookup(SSE41CostTable, ISD, LT.second)) in getArithmeticInstrCost()
986 { ISD::SHL, MVT::v16i8, 13 }, // cmpgtb sequence. in getArithmeticInstrCost()
987 { ISD::SHL, MVT::v8i16, 25 }, // cmpgtw sequence. in getArithmeticInstrCost()
988 { ISD::SHL, MVT::v4i32, 16 }, // pslld/paddd/cvttps2dq/pmuludq. in getArithmeticInstrCost()
989 { ISD::SHL, MVT::v2i64, 4 }, // splat+shuffle sequence. in getArithmeticInstrCost()
991 { ISD::SRL, MVT::v16i8, 14 }, // cmpgtb sequence. in getArithmeticInstrCost()
992 { ISD::SRL, MVT::v8i16, 16 }, // cmpgtw sequence. in getArithmeticInstrCost()
993 { ISD::SRL, MVT::v4i32, 12 }, // Shift each lane + blend. in getArithmeticInstrCost()
994 { ISD::SRL, MVT::v2i64, 4 }, // splat+shuffle sequence. in getArithmeticInstrCost()
996 { ISD::SRA, MVT::v16i8, 27 }, // unpacked cmpgtb sequence. in getArithmeticInstrCost()
997 { ISD::SRA, MVT::v8i16, 16 }, // cmpgtw sequence. in getArithmeticInstrCost()
998 { ISD::SRA, MVT::v4i32, 12 }, // Shift each lane + blend. in getArithmeticInstrCost()
999 { ISD::SRA, MVT::v2i64, 8 }, // srl/xor/sub splat+shuffle sequence. in getArithmeticInstrCost()
1001 { ISD::MUL, MVT::v8i16, 1 }, // pmullw in getArithmeticInstrCost()
1002 { ISD::MUL, MVT::v4i32, 6 }, // 3*pmuludq/4*shuffle in getArithmeticInstrCost()
1003 { ISD::MUL, MVT::v2i64, 8 }, // 3*pmuludq/3*shift/2*add in getArithmeticInstrCost()
1005 { ISD::FDIV, MVT::f32, 23 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1006 { ISD::FDIV, MVT::v4f32, 39 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1007 { ISD::FDIV, MVT::f64, 38 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1008 { ISD::FDIV, MVT::v2f64, 69 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1010 { ISD::FNEG, MVT::f32, 1 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1011 { ISD::FNEG, MVT::f64, 1 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1012 { ISD::FNEG, MVT::v4f32, 1 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1013 { ISD::FNEG, MVT::v2f64, 1 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1015 { ISD::FADD, MVT::f32, 2 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1016 { ISD::FADD, MVT::f64, 2 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1018 { ISD::FSUB, MVT::f32, 2 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1019 { ISD::FSUB, MVT::f64, 2 }, // Pentium IV from http://www.agner.org/ in getArithmeticInstrCost()
1023 if (const auto *Entry = CostTableLookup(SSE2CostTable, ISD, LT.second)) in getArithmeticInstrCost()
1027 { ISD::FDIV, MVT::f32, 17 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1028 { ISD::FDIV, MVT::v4f32, 34 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1030 { ISD::FNEG, MVT::f32, 2 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1031 { ISD::FNEG, MVT::v4f32, 2 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1033 { ISD::FADD, MVT::f32, 1 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1034 { ISD::FADD, MVT::v4f32, 2 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1036 { ISD::FSUB, MVT::f32, 1 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1037 { ISD::FSUB, MVT::v4f32, 2 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1041 if (const auto *Entry = CostTableLookup(SSE1CostTable, ISD, LT.second)) in getArithmeticInstrCost()
1045 { ISD::ADD, MVT::i64, 1 }, // Core (Merom) from http://www.agner.org/ in getArithmeticInstrCost()
1046 { ISD::SUB, MVT::i64, 1 }, // Core (Merom) from http://www.agner.org/ in getArithmeticInstrCost()
1047 { ISD::MUL, MVT::i64, 2 }, // Nehalem from http://www.agner.org/ in getArithmeticInstrCost()
1051 if (const auto *Entry = CostTableLookup(X64CostTbl, ISD, LT.second)) in getArithmeticInstrCost()
1055 { ISD::ADD, MVT::i8, 1 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1056 { ISD::ADD, MVT::i16, 1 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1057 { ISD::ADD, MVT::i32, 1 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1059 { ISD::SUB, MVT::i8, 1 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1060 { ISD::SUB, MVT::i16, 1 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1061 { ISD::SUB, MVT::i32, 1 }, // Pentium III from http://www.agner.org/ in getArithmeticInstrCost()
1064 if (const auto *Entry = CostTableLookup(X86CostTbl, ISD, LT.second)) in getArithmeticInstrCost()
1073 if (LT.second.isVector() && (ISD == ISD::SDIV || ISD == ISD::SREM || in getArithmeticInstrCost()
1074 ISD == ISD::UDIV || ISD == ISD::UREM)) { in getArithmeticInstrCost()
1660 int ISD = TLI->InstructionOpcodeToISD(Opcode); in getCastInstrCost() local
1661 assert(ISD && "Invalid opcode"); in getCastInstrCost()
1676 { ISD::SIGN_EXTEND, MVT::v32i16, MVT::v32i8, 1 }, in getCastInstrCost()
1677 { ISD::ZERO_EXTEND, MVT::v32i16, MVT::v32i8, 1 }, in getCastInstrCost()
1680 { ISD::SIGN_EXTEND, MVT::v2i8, MVT::v2i1, 1 }, in getCastInstrCost()
1681 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v2i1, 1 }, in getCastInstrCost()
1682 { ISD::SIGN_EXTEND, MVT::v2i16, MVT::v2i1, 1 }, in getCastInstrCost()
1683 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v2i1, 1 }, in getCastInstrCost()
1684 { ISD::SIGN_EXTEND, MVT::v4i8, MVT::v4i1, 1 }, in getCastInstrCost()
1685 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v4i1, 1 }, in getCastInstrCost()
1686 { ISD::SIGN_EXTEND, MVT::v4i16, MVT::v4i1, 1 }, in getCastInstrCost()
1687 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v4i1, 1 }, in getCastInstrCost()
1688 { ISD::SIGN_EXTEND, MVT::v8i8, MVT::v8i1, 1 }, in getCastInstrCost()
1689 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v8i1, 1 }, in getCastInstrCost()
1690 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v8i1, 1 }, in getCastInstrCost()
1691 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v16i1, 1 }, in getCastInstrCost()
1692 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i1, 1 }, in getCastInstrCost()
1693 { ISD::SIGN_EXTEND, MVT::v32i8, MVT::v32i1, 1 }, in getCastInstrCost()
1694 { ISD::SIGN_EXTEND, MVT::v32i16, MVT::v32i1, 1 }, in getCastInstrCost()
1695 { ISD::SIGN_EXTEND, MVT::v64i8, MVT::v64i1, 1 }, in getCastInstrCost()
1696 { ISD::SIGN_EXTEND, MVT::v32i16, MVT::v64i1, 1 }, in getCastInstrCost()
1699 { ISD::ZERO_EXTEND, MVT::v2i8, MVT::v2i1, 2 }, in getCastInstrCost()
1700 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v2i1, 2 }, in getCastInstrCost()
1701 { ISD::ZERO_EXTEND, MVT::v2i16, MVT::v2i1, 2 }, in getCastInstrCost()
1702 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v2i1, 2 }, in getCastInstrCost()
1703 { ISD::ZERO_EXTEND, MVT::v4i8, MVT::v4i1, 2 }, in getCastInstrCost()
1704 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v4i1, 2 }, in getCastInstrCost()
1705 { ISD::ZERO_EXTEND, MVT::v4i16, MVT::v4i1, 2 }, in getCastInstrCost()
1706 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v4i1, 2 }, in getCastInstrCost()
1707 { ISD::ZERO_EXTEND, MVT::v8i8, MVT::v8i1, 2 }, in getCastInstrCost()
1708 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v8i1, 2 }, in getCastInstrCost()
1709 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v8i1, 2 }, in getCastInstrCost()
1710 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v16i1, 2 }, in getCastInstrCost()
1711 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i1, 2 }, in getCastInstrCost()
1712 { ISD::ZERO_EXTEND, MVT::v32i8, MVT::v32i1, 2 }, in getCastInstrCost()
1713 { ISD::ZERO_EXTEND, MVT::v32i16, MVT::v32i1, 2 }, in getCastInstrCost()
1714 { ISD::ZERO_EXTEND, MVT::v64i8, MVT::v64i1, 2 }, in getCastInstrCost()
1715 { ISD::ZERO_EXTEND, MVT::v32i16, MVT::v64i1, 2 }, in getCastInstrCost()
1717 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i8, 2 }, in getCastInstrCost()
1718 { ISD::TRUNCATE, MVT::v2i1, MVT::v16i8, 2 }, in getCastInstrCost()
1719 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i16, 2 }, in getCastInstrCost()
1720 { ISD::TRUNCATE, MVT::v2i1, MVT::v8i16, 2 }, in getCastInstrCost()
1721 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i8, 2 }, in getCastInstrCost()
1722 { ISD::TRUNCATE, MVT::v4i1, MVT::v16i8, 2 }, in getCastInstrCost()
1723 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i16, 2 }, in getCastInstrCost()
1724 { ISD::TRUNCATE, MVT::v4i1, MVT::v8i16, 2 }, in getCastInstrCost()
1725 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i8, 2 }, in getCastInstrCost()
1726 { ISD::TRUNCATE, MVT::v8i1, MVT::v16i8, 2 }, in getCastInstrCost()
1727 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i16, 2 }, in getCastInstrCost()
1728 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i8, 2 }, in getCastInstrCost()
1729 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i16, 2 }, in getCastInstrCost()
1730 { ISD::TRUNCATE, MVT::v32i1, MVT::v32i8, 2 }, in getCastInstrCost()
1731 { ISD::TRUNCATE, MVT::v32i1, MVT::v32i16, 2 }, in getCastInstrCost()
1732 { ISD::TRUNCATE, MVT::v64i1, MVT::v64i8, 2 }, in getCastInstrCost()
1733 { ISD::TRUNCATE, MVT::v64i1, MVT::v32i16, 2 }, in getCastInstrCost()
1735 { ISD::TRUNCATE, MVT::v32i8, MVT::v32i16, 2 }, in getCastInstrCost()
1736 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i16, 2 }, // widen to zmm in getCastInstrCost()
1737 { ISD::TRUNCATE, MVT::v2i8, MVT::v2i16, 2 }, // vpmovwb in getCastInstrCost()
1738 { ISD::TRUNCATE, MVT::v4i8, MVT::v4i16, 2 }, // vpmovwb in getCastInstrCost()
1739 { ISD::TRUNCATE, MVT::v8i8, MVT::v8i16, 2 }, // vpmovwb in getCastInstrCost()
1744 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v2i1, 1 }, in getCastInstrCost()
1745 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v2i1, 1 }, in getCastInstrCost()
1746 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v4i1, 1 }, in getCastInstrCost()
1747 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i1, 1 }, in getCastInstrCost()
1748 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i1, 1 }, in getCastInstrCost()
1749 { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v16i1, 1 }, in getCastInstrCost()
1750 { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v8i1, 1 }, in getCastInstrCost()
1751 { ISD::SIGN_EXTEND, MVT::v16i32, MVT::v16i1, 1 }, in getCastInstrCost()
1754 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v2i1, 2 }, in getCastInstrCost()
1755 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v2i1, 2 }, in getCastInstrCost()
1756 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v4i1, 2 }, in getCastInstrCost()
1757 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i1, 2 }, in getCastInstrCost()
1758 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i1, 2 }, in getCastInstrCost()
1759 { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v16i1, 2 }, in getCastInstrCost()
1760 { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v8i1, 2 }, in getCastInstrCost()
1761 { ISD::ZERO_EXTEND, MVT::v16i32, MVT::v16i1, 2 }, in getCastInstrCost()
1763 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i64, 2 }, in getCastInstrCost()
1764 { ISD::TRUNCATE, MVT::v2i1, MVT::v4i32, 2 }, in getCastInstrCost()
1765 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i32, 2 }, in getCastInstrCost()
1766 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i64, 2 }, in getCastInstrCost()
1767 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i32, 2 }, in getCastInstrCost()
1768 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i64, 2 }, in getCastInstrCost()
1769 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i32, 2 }, in getCastInstrCost()
1770 { ISD::TRUNCATE, MVT::v16i1, MVT::v8i64, 2 }, in getCastInstrCost()
1772 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i64, 1 }, in getCastInstrCost()
1773 { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i64, 1 }, in getCastInstrCost()
1775 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i64, 1 }, in getCastInstrCost()
1776 { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i64, 1 }, in getCastInstrCost()
1778 { ISD::FP_TO_SINT, MVT::v8i64, MVT::v8f32, 1 }, in getCastInstrCost()
1779 { ISD::FP_TO_SINT, MVT::v8i64, MVT::v8f64, 1 }, in getCastInstrCost()
1781 { ISD::FP_TO_UINT, MVT::v8i64, MVT::v8f32, 1 }, in getCastInstrCost()
1782 { ISD::FP_TO_UINT, MVT::v8i64, MVT::v8f64, 1 }, in getCastInstrCost()
1789 { ISD::FP_EXTEND, MVT::v8f64, MVT::v8f32, 1 }, in getCastInstrCost()
1790 { ISD::FP_EXTEND, MVT::v8f64, MVT::v16f32, 3 }, in getCastInstrCost()
1791 { ISD::FP_ROUND, MVT::v8f32, MVT::v8f64, 1 }, in getCastInstrCost()
1793 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i8, 3 }, // sext+vpslld+vptestmd in getCastInstrCost()
1794 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i8, 3 }, // sext+vpslld+vptestmd in getCastInstrCost()
1795 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i8, 3 }, // sext+vpslld+vptestmd in getCastInstrCost()
1796 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i8, 3 }, // sext+vpslld+vptestmd in getCastInstrCost()
1797 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i16, 3 }, // sext+vpsllq+vptestmq in getCastInstrCost()
1798 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i16, 3 }, // sext+vpsllq+vptestmq in getCastInstrCost()
1799 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i16, 3 }, // sext+vpsllq+vptestmq in getCastInstrCost()
1800 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i16, 3 }, // sext+vpslld+vptestmd in getCastInstrCost()
1801 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i32, 2 }, // zmm vpslld+vptestmd in getCastInstrCost()
1802 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i32, 2 }, // zmm vpslld+vptestmd in getCastInstrCost()
1803 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i32, 2 }, // zmm vpslld+vptestmd in getCastInstrCost()
1804 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i32, 2 }, // vpslld+vptestmd in getCastInstrCost()
1805 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i64, 2 }, // zmm vpsllq+vptestmq in getCastInstrCost()
1806 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i64, 2 }, // zmm vpsllq+vptestmq in getCastInstrCost()
1807 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i64, 2 }, // vpsllq+vptestmq in getCastInstrCost()
1808 { ISD::TRUNCATE, MVT::v2i8, MVT::v2i32, 2 }, // vpmovdb in getCastInstrCost()
1809 { ISD::TRUNCATE, MVT::v4i8, MVT::v4i32, 2 }, // vpmovdb in getCastInstrCost()
1810 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i32, 2 }, // vpmovdb in getCastInstrCost()
1811 { ISD::TRUNCATE, MVT::v32i8, MVT::v16i32, 2 }, // vpmovdb in getCastInstrCost()
1812 { ISD::TRUNCATE, MVT::v64i8, MVT::v16i32, 2 }, // vpmovdb in getCastInstrCost()
1813 { ISD::TRUNCATE, MVT::v16i16, MVT::v16i32, 2 }, // vpmovdw in getCastInstrCost()
1814 { ISD::TRUNCATE, MVT::v32i16, MVT::v16i32, 2 }, // vpmovdw in getCastInstrCost()
1815 { ISD::TRUNCATE, MVT::v2i8, MVT::v2i64, 2 }, // vpmovqb in getCastInstrCost()
1816 { ISD::TRUNCATE, MVT::v2i16, MVT::v2i64, 1 }, // vpshufb in getCastInstrCost()
1817 { ISD::TRUNCATE, MVT::v8i8, MVT::v8i64, 2 }, // vpmovqb in getCastInstrCost()
1818 { ISD::TRUNCATE, MVT::v16i8, MVT::v8i64, 2 }, // vpmovqb in getCastInstrCost()
1819 { ISD::TRUNCATE, MVT::v32i8, MVT::v8i64, 2 }, // vpmovqb in getCastInstrCost()
1820 { ISD::TRUNCATE, MVT::v64i8, MVT::v8i64, 2 }, // vpmovqb in getCastInstrCost()
1821 { ISD::TRUNCATE, MVT::v8i16, MVT::v8i64, 2 }, // vpmovqw in getCastInstrCost()
1822 { ISD::TRUNCATE, MVT::v16i16, MVT::v8i64, 2 }, // vpmovqw in getCastInstrCost()
1823 { ISD::TRUNCATE, MVT::v32i16, MVT::v8i64, 2 }, // vpmovqw in getCastInstrCost()
1824 { ISD::TRUNCATE, MVT::v8i32, MVT::v8i64, 1 }, // vpmovqd in getCastInstrCost()
1825 { ISD::TRUNCATE, MVT::v4i32, MVT::v4i64, 1 }, // zmm vpmovqd in getCastInstrCost()
1826 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i64, 5 },// 2*vpmovqd+concat+vpmovdb in getCastInstrCost()
1828 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i16, 3 }, // extend to v16i32 in getCastInstrCost()
1829 { ISD::TRUNCATE, MVT::v32i8, MVT::v32i16, 8 }, in getCastInstrCost()
1830 { ISD::TRUNCATE, MVT::v64i8, MVT::v32i16, 8 }, in getCastInstrCost()
1834 { ISD::SIGN_EXTEND, MVT::v2i8, MVT::v2i1, 3 }, in getCastInstrCost()
1835 { ISD::ZERO_EXTEND, MVT::v2i8, MVT::v2i1, 4 }, in getCastInstrCost()
1836 { ISD::SIGN_EXTEND, MVT::v4i8, MVT::v4i1, 3 }, in getCastInstrCost()
1837 { ISD::ZERO_EXTEND, MVT::v4i8, MVT::v4i1, 4 }, in getCastInstrCost()
1838 { ISD::SIGN_EXTEND, MVT::v8i8, MVT::v8i1, 3 }, in getCastInstrCost()
1839 { ISD::ZERO_EXTEND, MVT::v8i8, MVT::v8i1, 4 }, in getCastInstrCost()
1840 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v16i1, 3 }, in getCastInstrCost()
1841 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v16i1, 4 }, in getCastInstrCost()
1845 { ISD::SIGN_EXTEND, MVT::v2i16, MVT::v2i1, 3 }, in getCastInstrCost()
1846 { ISD::ZERO_EXTEND, MVT::v2i16, MVT::v2i1, 4 }, in getCastInstrCost()
1847 { ISD::SIGN_EXTEND, MVT::v4i16, MVT::v4i1, 3 }, in getCastInstrCost()
1848 { ISD::ZERO_EXTEND, MVT::v4i16, MVT::v4i1, 4 }, in getCastInstrCost()
1849 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v8i1, 3 }, in getCastInstrCost()
1850 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v8i1, 4 }, in getCastInstrCost()
1851 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i1, 3 }, in getCastInstrCost()
1852 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i1, 4 }, in getCastInstrCost()
1854 { ISD::SIGN_EXTEND, MVT::v2i32, MVT::v2i1, 1 }, // zmm vpternlogd in getCastInstrCost()
1855 { ISD::ZERO_EXTEND, MVT::v2i32, MVT::v2i1, 2 }, // zmm vpternlogd+psrld in getCastInstrCost()
1856 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v4i1, 1 }, // zmm vpternlogd in getCastInstrCost()
1857 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v4i1, 2 }, // zmm vpternlogd+psrld in getCastInstrCost()
1858 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i1, 1 }, // zmm vpternlogd in getCastInstrCost()
1859 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i1, 2 }, // zmm vpternlogd+psrld in getCastInstrCost()
1860 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v2i1, 1 }, // zmm vpternlogq in getCastInstrCost()
1861 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v2i1, 2 }, // zmm vpternlogq+psrlq in getCastInstrCost()
1862 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i1, 1 }, // zmm vpternlogq in getCastInstrCost()
1863 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i1, 2 }, // zmm vpternlogq+psrlq in getCastInstrCost()
1865 { ISD::SIGN_EXTEND, MVT::v16i32, MVT::v16i1, 1 }, // vpternlogd in getCastInstrCost()
1866 { ISD::ZERO_EXTEND, MVT::v16i32, MVT::v16i1, 2 }, // vpternlogd+psrld in getCastInstrCost()
1867 { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v8i1, 1 }, // vpternlogq in getCastInstrCost()
1868 { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v8i1, 2 }, // vpternlogq+psrlq in getCastInstrCost()
1870 { ISD::SIGN_EXTEND, MVT::v16i32, MVT::v16i8, 1 }, in getCastInstrCost()
1871 { ISD::ZERO_EXTEND, MVT::v16i32, MVT::v16i8, 1 }, in getCastInstrCost()
1872 { ISD::SIGN_EXTEND, MVT::v16i32, MVT::v16i16, 1 }, in getCastInstrCost()
1873 { ISD::ZERO_EXTEND, MVT::v16i32, MVT::v16i16, 1 }, in getCastInstrCost()
1874 { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v8i8, 1 }, in getCastInstrCost()
1875 { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v8i8, 1 }, in getCastInstrCost()
1876 { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v8i16, 1 }, in getCastInstrCost()
1877 { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v8i16, 1 }, in getCastInstrCost()
1878 { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v8i32, 1 }, in getCastInstrCost()
1879 { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v8i32, 1 }, in getCastInstrCost()
1881 { ISD::SIGN_EXTEND, MVT::v32i16, MVT::v32i8, 3 }, // FIXME: May not be right in getCastInstrCost()
1882 { ISD::ZERO_EXTEND, MVT::v32i16, MVT::v32i8, 3 }, // FIXME: May not be right in getCastInstrCost()
1884 { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i1, 4 }, in getCastInstrCost()
1885 { ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i1, 3 }, in getCastInstrCost()
1886 { ISD::SINT_TO_FP, MVT::v8f64, MVT::v16i8, 2 }, in getCastInstrCost()
1887 { ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i8, 1 }, in getCastInstrCost()
1888 { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i16, 2 }, in getCastInstrCost()
1889 { ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i16, 1 }, in getCastInstrCost()
1890 { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i32, 1 }, in getCastInstrCost()
1891 { ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i32, 1 }, in getCastInstrCost()
1893 { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i1, 4 }, in getCastInstrCost()
1894 { ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i1, 3 }, in getCastInstrCost()
1895 { ISD::UINT_TO_FP, MVT::v8f64, MVT::v16i8, 2 }, in getCastInstrCost()
1896 { ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i8, 1 }, in getCastInstrCost()
1897 { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i16, 2 }, in getCastInstrCost()
1898 { ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i16, 1 }, in getCastInstrCost()
1899 { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i32, 1 }, in getCastInstrCost()
1900 { ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i32, 1 }, in getCastInstrCost()
1901 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i64, 26 }, in getCastInstrCost()
1902 { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i64, 5 }, in getCastInstrCost()
1904 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v16f32, 2 }, in getCastInstrCost()
1905 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v16f64, 7 }, in getCastInstrCost()
1906 { ISD::FP_TO_SINT, MVT::v32i8, MVT::v32f64,15 }, in getCastInstrCost()
1907 { ISD::FP_TO_SINT, MVT::v64i8, MVT::v64f32,11 }, in getCastInstrCost()
1908 { ISD::FP_TO_SINT, MVT::v64i8, MVT::v64f64,31 }, in getCastInstrCost()
1909 { ISD::FP_TO_SINT, MVT::v8i16, MVT::v8f64, 3 }, in getCastInstrCost()
1910 { ISD::FP_TO_SINT, MVT::v16i16, MVT::v16f64, 7 }, in getCastInstrCost()
1911 { ISD::FP_TO_SINT, MVT::v32i16, MVT::v32f32, 5 }, in getCastInstrCost()
1912 { ISD::FP_TO_SINT, MVT::v32i16, MVT::v32f64,15 }, in getCastInstrCost()
1913 { ISD::FP_TO_SINT, MVT::v8i32, MVT::v8f64, 1 }, in getCastInstrCost()
1914 { ISD::FP_TO_SINT, MVT::v16i32, MVT::v16f64, 3 }, in getCastInstrCost()
1916 { ISD::FP_TO_UINT, MVT::v8i32, MVT::v8f64, 1 }, in getCastInstrCost()
1917 { ISD::FP_TO_UINT, MVT::v8i16, MVT::v8f64, 3 }, in getCastInstrCost()
1918 { ISD::FP_TO_UINT, MVT::v8i8, MVT::v8f64, 3 }, in getCastInstrCost()
1919 { ISD::FP_TO_UINT, MVT::v16i32, MVT::v16f32, 1 }, in getCastInstrCost()
1920 { ISD::FP_TO_UINT, MVT::v16i16, MVT::v16f32, 3 }, in getCastInstrCost()
1921 { ISD::FP_TO_UINT, MVT::v16i8, MVT::v16f32, 3 }, in getCastInstrCost()
1926 { ISD::SIGN_EXTEND, MVT::v2i8, MVT::v2i1, 1 }, in getCastInstrCost()
1927 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v2i1, 1 }, in getCastInstrCost()
1928 { ISD::SIGN_EXTEND, MVT::v2i16, MVT::v2i1, 1 }, in getCastInstrCost()
1929 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v2i1, 1 }, in getCastInstrCost()
1930 { ISD::SIGN_EXTEND, MVT::v4i16, MVT::v4i1, 1 }, in getCastInstrCost()
1931 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v4i1, 1 }, in getCastInstrCost()
1932 { ISD::SIGN_EXTEND, MVT::v4i8, MVT::v4i1, 1 }, in getCastInstrCost()
1933 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v4i1, 1 }, in getCastInstrCost()
1934 { ISD::SIGN_EXTEND, MVT::v8i8, MVT::v8i1, 1 }, in getCastInstrCost()
1935 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v8i1, 1 }, in getCastInstrCost()
1936 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v8i1, 1 }, in getCastInstrCost()
1937 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v16i1, 1 }, in getCastInstrCost()
1938 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i1, 1 }, in getCastInstrCost()
1939 { ISD::SIGN_EXTEND, MVT::v32i8, MVT::v32i1, 1 }, in getCastInstrCost()
1940 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v32i1, 1 }, in getCastInstrCost()
1941 { ISD::SIGN_EXTEND, MVT::v32i8, MVT::v64i1, 1 }, in getCastInstrCost()
1942 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v64i1, 1 }, in getCastInstrCost()
1945 { ISD::ZERO_EXTEND, MVT::v2i8, MVT::v2i1, 2 }, in getCastInstrCost()
1946 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v2i1, 2 }, in getCastInstrCost()
1947 { ISD::ZERO_EXTEND, MVT::v2i16, MVT::v2i1, 2 }, in getCastInstrCost()
1948 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v2i1, 2 }, in getCastInstrCost()
1949 { ISD::ZERO_EXTEND, MVT::v4i8, MVT::v4i1, 2 }, in getCastInstrCost()
1950 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v4i1, 2 }, in getCastInstrCost()
1951 { ISD::ZERO_EXTEND, MVT::v4i16, MVT::v4i1, 2 }, in getCastInstrCost()
1952 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v4i1, 2 }, in getCastInstrCost()
1953 { ISD::ZERO_EXTEND, MVT::v8i8, MVT::v8i1, 2 }, in getCastInstrCost()
1954 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v8i1, 2 }, in getCastInstrCost()
1955 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v8i1, 2 }, in getCastInstrCost()
1956 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v16i1, 2 }, in getCastInstrCost()
1957 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i1, 2 }, in getCastInstrCost()
1958 { ISD::ZERO_EXTEND, MVT::v32i8, MVT::v32i1, 2 }, in getCastInstrCost()
1959 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v32i1, 2 }, in getCastInstrCost()
1960 { ISD::ZERO_EXTEND, MVT::v32i8, MVT::v64i1, 2 }, in getCastInstrCost()
1961 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v64i1, 2 }, in getCastInstrCost()
1963 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i8, 2 }, in getCastInstrCost()
1964 { ISD::TRUNCATE, MVT::v2i1, MVT::v16i8, 2 }, in getCastInstrCost()
1965 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i16, 2 }, in getCastInstrCost()
1966 { ISD::TRUNCATE, MVT::v2i1, MVT::v8i16, 2 }, in getCastInstrCost()
1967 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i8, 2 }, in getCastInstrCost()
1968 { ISD::TRUNCATE, MVT::v4i1, MVT::v16i8, 2 }, in getCastInstrCost()
1969 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i16, 2 }, in getCastInstrCost()
1970 { ISD::TRUNCATE, MVT::v4i1, MVT::v8i16, 2 }, in getCastInstrCost()
1971 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i8, 2 }, in getCastInstrCost()
1972 { ISD::TRUNCATE, MVT::v8i1, MVT::v16i8, 2 }, in getCastInstrCost()
1973 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i16, 2 }, in getCastInstrCost()
1974 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i8, 2 }, in getCastInstrCost()
1975 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i16, 2 }, in getCastInstrCost()
1976 { ISD::TRUNCATE, MVT::v32i1, MVT::v32i8, 2 }, in getCastInstrCost()
1977 { ISD::TRUNCATE, MVT::v32i1, MVT::v16i16, 2 }, in getCastInstrCost()
1978 { ISD::TRUNCATE, MVT::v64i1, MVT::v32i8, 2 }, in getCastInstrCost()
1979 { ISD::TRUNCATE, MVT::v64i1, MVT::v16i16, 2 }, in getCastInstrCost()
1981 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i16, 2 }, in getCastInstrCost()
1986 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v2i1, 1 }, in getCastInstrCost()
1987 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v2i1, 1 }, in getCastInstrCost()
1988 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v4i1, 1 }, in getCastInstrCost()
1989 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v16i1, 1 }, in getCastInstrCost()
1990 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i1, 1 }, in getCastInstrCost()
1991 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v8i1, 1 }, in getCastInstrCost()
1992 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v16i1, 1 }, in getCastInstrCost()
1993 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i1, 1 }, in getCastInstrCost()
1996 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v2i1, 2 }, in getCastInstrCost()
1997 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v2i1, 2 }, in getCastInstrCost()
1998 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v4i1, 2 }, in getCastInstrCost()
1999 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v16i1, 2 }, in getCastInstrCost()
2000 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i1, 2 }, in getCastInstrCost()
2001 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v8i1, 2 }, in getCastInstrCost()
2002 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v16i1, 2 }, in getCastInstrCost()
2003 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i1, 2 }, in getCastInstrCost()
2005 { ISD::TRUNCATE, MVT::v16i1, MVT::v4i64, 2 }, in getCastInstrCost()
2006 { ISD::TRUNCATE, MVT::v16i1, MVT::v8i32, 2 }, in getCastInstrCost()
2007 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i64, 2 }, in getCastInstrCost()
2008 { ISD::TRUNCATE, MVT::v2i1, MVT::v4i32, 2 }, in getCastInstrCost()
2009 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i32, 2 }, in getCastInstrCost()
2010 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i64, 2 }, in getCastInstrCost()
2011 { ISD::TRUNCATE, MVT::v8i1, MVT::v4i64, 2 }, in getCastInstrCost()
2012 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i32, 2 }, in getCastInstrCost()
2014 { ISD::SINT_TO_FP, MVT::v2f32, MVT::v2i64, 1 }, in getCastInstrCost()
2015 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v2i64, 1 }, in getCastInstrCost()
2016 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i64, 1 }, in getCastInstrCost()
2017 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i64, 1 }, in getCastInstrCost()
2019 { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i64, 1 }, in getCastInstrCost()
2020 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 1 }, in getCastInstrCost()
2021 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i64, 1 }, in getCastInstrCost()
2022 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i64, 1 }, in getCastInstrCost()
2024 { ISD::FP_TO_SINT, MVT::v2i64, MVT::v4f32, 1 }, in getCastInstrCost()
2025 { ISD::FP_TO_SINT, MVT::v4i64, MVT::v4f32, 1 }, in getCastInstrCost()
2026 { ISD::FP_TO_SINT, MVT::v2i64, MVT::v2f64, 1 }, in getCastInstrCost()
2027 { ISD::FP_TO_SINT, MVT::v4i64, MVT::v4f64, 1 }, in getCastInstrCost()
2029 { ISD::FP_TO_UINT, MVT::v2i64, MVT::v4f32, 1 }, in getCastInstrCost()
2030 { ISD::FP_TO_UINT, MVT::v4i64, MVT::v4f32, 1 }, in getCastInstrCost()
2031 { ISD::FP_TO_UINT, MVT::v2i64, MVT::v2f64, 1 }, in getCastInstrCost()
2032 { ISD::FP_TO_UINT, MVT::v4i64, MVT::v4f64, 1 }, in getCastInstrCost()
2036 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i8, 3 }, // sext+vpslld+vptestmd in getCastInstrCost()
2037 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i8, 3 }, // sext+vpslld+vptestmd in getCastInstrCost()
2038 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i8, 3 }, // sext+vpslld+vptestmd in getCastInstrCost()
2039 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i8, 8 }, // split+2*v8i8 in getCastInstrCost()
2040 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i16, 3 }, // sext+vpsllq+vptestmq in getCastInstrCost()
2041 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i16, 3 }, // sext+vpsllq+vptestmq in getCastInstrCost()
2042 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i16, 3 }, // sext+vpsllq+vptestmq in getCastInstrCost()
2043 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i16, 8 }, // split+2*v8i16 in getCastInstrCost()
2044 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i32, 2 }, // vpslld+vptestmd in getCastInstrCost()
2045 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i32, 2 }, // vpslld+vptestmd in getCastInstrCost()
2046 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i32, 2 }, // vpslld+vptestmd in getCastInstrCost()
2047 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i64, 2 }, // vpsllq+vptestmq in getCastInstrCost()
2048 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i64, 2 }, // vpsllq+vptestmq in getCastInstrCost()
2049 { ISD::TRUNCATE, MVT::v4i32, MVT::v4i64, 1 }, // vpmovqd in getCastInstrCost()
2050 { ISD::TRUNCATE, MVT::v4i8, MVT::v4i64, 2 }, // vpmovqb in getCastInstrCost()
2051 { ISD::TRUNCATE, MVT::v4i16, MVT::v4i64, 2 }, // vpmovqw in getCastInstrCost()
2052 { ISD::TRUNCATE, MVT::v8i8, MVT::v8i32, 2 }, // vpmovwb in getCastInstrCost()
2056 { ISD::SIGN_EXTEND, MVT::v2i8, MVT::v2i1, 5 }, in getCastInstrCost()
2057 { ISD::ZERO_EXTEND, MVT::v2i8, MVT::v2i1, 6 }, in getCastInstrCost()
2058 { ISD::SIGN_EXTEND, MVT::v4i8, MVT::v4i1, 5 }, in getCastInstrCost()
2059 { ISD::ZERO_EXTEND, MVT::v4i8, MVT::v4i1, 6 }, in getCastInstrCost()
2060 { ISD::SIGN_EXTEND, MVT::v8i8, MVT::v8i1, 5 }, in getCastInstrCost()
2061 { ISD::ZERO_EXTEND, MVT::v8i8, MVT::v8i1, 6 }, in getCastInstrCost()
2062 { ISD::SIGN_EXTEND, MVT::v16i8, MVT::v16i1, 10 }, in getCastInstrCost()
2063 { ISD::ZERO_EXTEND, MVT::v16i8, MVT::v16i1, 12 }, in getCastInstrCost()
2067 { ISD::SIGN_EXTEND, MVT::v2i16, MVT::v2i1, 4 }, in getCastInstrCost()
2068 { ISD::ZERO_EXTEND, MVT::v2i16, MVT::v2i1, 5 }, in getCastInstrCost()
2069 { ISD::SIGN_EXTEND, MVT::v4i16, MVT::v4i1, 4 }, in getCastInstrCost()
2070 { ISD::ZERO_EXTEND, MVT::v4i16, MVT::v4i1, 5 }, in getCastInstrCost()
2071 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v8i1, 4 }, in getCastInstrCost()
2072 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v8i1, 5 }, in getCastInstrCost()
2073 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i1, 10 }, in getCastInstrCost()
2074 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i1, 12 }, in getCastInstrCost()
2076 { ISD::SIGN_EXTEND, MVT::v2i32, MVT::v2i1, 1 }, // vpternlogd in getCastInstrCost()
2077 { ISD::ZERO_EXTEND, MVT::v2i32, MVT::v2i1, 2 }, // vpternlogd+psrld in getCastInstrCost()
2078 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v4i1, 1 }, // vpternlogd in getCastInstrCost()
2079 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v4i1, 2 }, // vpternlogd+psrld in getCastInstrCost()
2080 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i1, 1 }, // vpternlogd in getCastInstrCost()
2081 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i1, 2 }, // vpternlogd+psrld in getCastInstrCost()
2082 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v2i1, 1 }, // vpternlogq in getCastInstrCost()
2083 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v2i1, 2 }, // vpternlogq+psrlq in getCastInstrCost()
2084 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i1, 1 }, // vpternlogq in getCastInstrCost()
2085 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i1, 2 }, // vpternlogq+psrlq in getCastInstrCost()
2087 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v16i8, 1 }, in getCastInstrCost()
2088 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v16i8, 1 }, in getCastInstrCost()
2089 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v16i8, 1 }, in getCastInstrCost()
2090 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v16i8, 1 }, in getCastInstrCost()
2091 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i8, 1 }, in getCastInstrCost()
2092 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i8, 1 }, in getCastInstrCost()
2093 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v8i16, 1 }, in getCastInstrCost()
2094 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v8i16, 1 }, in getCastInstrCost()
2095 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i16, 1 }, in getCastInstrCost()
2096 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i16, 1 }, in getCastInstrCost()
2097 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i32, 1 }, in getCastInstrCost()
2098 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i32, 1 }, in getCastInstrCost()
2100 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v16i8, 1 }, in getCastInstrCost()
2101 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v16i8, 1 }, in getCastInstrCost()
2102 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v8i16, 1 }, in getCastInstrCost()
2103 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i16, 1 }, in getCastInstrCost()
2105 { ISD::UINT_TO_FP, MVT::f32, MVT::i64, 1 }, in getCastInstrCost()
2106 { ISD::UINT_TO_FP, MVT::f64, MVT::i64, 1 }, in getCastInstrCost()
2107 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v16i8, 1 }, in getCastInstrCost()
2108 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v16i8, 1 }, in getCastInstrCost()
2109 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v8i16, 1 }, in getCastInstrCost()
2110 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i16, 1 }, in getCastInstrCost()
2111 { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i32, 1 }, in getCastInstrCost()
2112 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 1 }, in getCastInstrCost()
2113 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i32, 1 }, in getCastInstrCost()
2114 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i32, 1 }, in getCastInstrCost()
2115 { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i64, 5 }, in getCastInstrCost()
2116 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 5 }, in getCastInstrCost()
2117 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i64, 5 }, in getCastInstrCost()
2119 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v8f32, 2 }, in getCastInstrCost()
2120 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v16f32, 2 }, in getCastInstrCost()
2121 { ISD::FP_TO_SINT, MVT::v32i8, MVT::v32f32, 5 }, in getCastInstrCost()
2123 { ISD::FP_TO_UINT, MVT::i64, MVT::f32, 1 }, in getCastInstrCost()
2124 { ISD::FP_TO_UINT, MVT::i64, MVT::f64, 1 }, in getCastInstrCost()
2125 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f32, 1 }, in getCastInstrCost()
2126 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v2f64, 1 }, in getCastInstrCost()
2127 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f64, 1 }, in getCastInstrCost()
2128 { ISD::FP_TO_UINT, MVT::v8i32, MVT::v8f32, 1 }, in getCastInstrCost()
2129 { ISD::FP_TO_UINT, MVT::v8i32, MVT::v8f64, 1 }, in getCastInstrCost()
2133 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i1, 3 }, in getCastInstrCost()
2134 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i1, 3 }, in getCastInstrCost()
2135 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i1, 3 }, in getCastInstrCost()
2136 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i1, 3 }, in getCastInstrCost()
2137 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i1, 1 }, in getCastInstrCost()
2138 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i1, 1 }, in getCastInstrCost()
2140 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v16i8, 2 }, in getCastInstrCost()
2141 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v16i8, 2 }, in getCastInstrCost()
2142 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v16i8, 2 }, in getCastInstrCost()
2143 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v16i8, 2 }, in getCastInstrCost()
2144 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i8, 2 }, in getCastInstrCost()
2145 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i8, 2 }, in getCastInstrCost()
2146 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v8i16, 2 }, in getCastInstrCost()
2147 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v8i16, 2 }, in getCastInstrCost()
2148 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i16, 2 }, in getCastInstrCost()
2149 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i16, 2 }, in getCastInstrCost()
2150 { ISD::ZERO_EXTEND, MVT::v16i32, MVT::v16i16, 3 }, in getCastInstrCost()
2151 { ISD::SIGN_EXTEND, MVT::v16i32, MVT::v16i16, 3 }, in getCastInstrCost()
2152 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i32, 2 }, in getCastInstrCost()
2153 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i32, 2 }, in getCastInstrCost()
2155 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i32, 2 }, in getCastInstrCost()
2157 { ISD::TRUNCATE, MVT::v16i16, MVT::v16i32, 4 }, in getCastInstrCost()
2158 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i32, 4 }, in getCastInstrCost()
2159 { ISD::TRUNCATE, MVT::v16i8, MVT::v8i16, 1 }, in getCastInstrCost()
2160 { ISD::TRUNCATE, MVT::v16i8, MVT::v4i32, 1 }, in getCastInstrCost()
2161 { ISD::TRUNCATE, MVT::v16i8, MVT::v2i64, 1 }, in getCastInstrCost()
2162 { ISD::TRUNCATE, MVT::v16i8, MVT::v8i32, 4 }, in getCastInstrCost()
2163 { ISD::TRUNCATE, MVT::v16i8, MVT::v4i64, 4 }, in getCastInstrCost()
2164 { ISD::TRUNCATE, MVT::v8i16, MVT::v4i32, 1 }, in getCastInstrCost()
2165 { ISD::TRUNCATE, MVT::v8i16, MVT::v2i64, 1 }, in getCastInstrCost()
2166 { ISD::TRUNCATE, MVT::v8i16, MVT::v4i64, 5 }, in getCastInstrCost()
2167 { ISD::TRUNCATE, MVT::v4i32, MVT::v4i64, 1 }, in getCastInstrCost()
2168 { ISD::TRUNCATE, MVT::v8i16, MVT::v8i32, 2 }, in getCastInstrCost()
2170 { ISD::FP_EXTEND, MVT::v8f64, MVT::v8f32, 3 }, in getCastInstrCost()
2171 { ISD::FP_ROUND, MVT::v8f32, MVT::v8f64, 3 }, in getCastInstrCost()
2173 { ISD::FP_TO_SINT, MVT::v16i16, MVT::v8f32, 1 }, in getCastInstrCost()
2174 { ISD::FP_TO_SINT, MVT::v4i32, MVT::v4f64, 1 }, in getCastInstrCost()
2175 { ISD::FP_TO_SINT, MVT::v8i32, MVT::v8f32, 1 }, in getCastInstrCost()
2176 { ISD::FP_TO_SINT, MVT::v8i32, MVT::v8f64, 3 }, in getCastInstrCost()
2178 { ISD::FP_TO_UINT, MVT::i64, MVT::f32, 3 }, in getCastInstrCost()
2179 { ISD::FP_TO_UINT, MVT::i64, MVT::f64, 3 }, in getCastInstrCost()
2180 { ISD::FP_TO_UINT, MVT::v16i16, MVT::v8f32, 1 }, in getCastInstrCost()
2181 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f32, 3 }, in getCastInstrCost()
2182 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v2f64, 4 }, in getCastInstrCost()
2183 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f64, 4 }, in getCastInstrCost()
2184 { ISD::FP_TO_UINT, MVT::v8i32, MVT::v8f32, 3 }, in getCastInstrCost()
2185 { ISD::FP_TO_UINT, MVT::v8i32, MVT::v4f64, 4 }, in getCastInstrCost()
2187 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v16i8, 2 }, in getCastInstrCost()
2188 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v16i8, 2 }, in getCastInstrCost()
2189 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v8i16, 2 }, in getCastInstrCost()
2190 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i16, 2 }, in getCastInstrCost()
2191 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i32, 1 }, in getCastInstrCost()
2192 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i32, 1 }, in getCastInstrCost()
2193 { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i32, 3 }, in getCastInstrCost()
2195 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v16i8, 2 }, in getCastInstrCost()
2196 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v16i8, 2 }, in getCastInstrCost()
2197 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v8i16, 2 }, in getCastInstrCost()
2198 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i16, 2 }, in getCastInstrCost()
2199 { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i32, 2 }, in getCastInstrCost()
2200 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i32, 1 }, in getCastInstrCost()
2201 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 2 }, in getCastInstrCost()
2202 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i32, 2 }, in getCastInstrCost()
2203 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i32, 2 }, in getCastInstrCost()
2204 { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i32, 4 }, in getCastInstrCost()
2208 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i1, 6 }, in getCastInstrCost()
2209 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i1, 4 }, in getCastInstrCost()
2210 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i1, 7 }, in getCastInstrCost()
2211 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i1, 4 }, in getCastInstrCost()
2212 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i1, 4 }, in getCastInstrCost()
2213 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i1, 4 }, in getCastInstrCost()
2215 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v16i8, 3 }, in getCastInstrCost()
2216 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v16i8, 3 }, in getCastInstrCost()
2217 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v16i8, 3 }, in getCastInstrCost()
2218 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v16i8, 3 }, in getCastInstrCost()
2219 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i8, 3 }, in getCastInstrCost()
2220 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i8, 3 }, in getCastInstrCost()
2221 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v8i16, 3 }, in getCastInstrCost()
2222 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v8i16, 3 }, in getCastInstrCost()
2223 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i16, 3 }, in getCastInstrCost()
2224 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i16, 3 }, in getCastInstrCost()
2225 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i32, 3 }, in getCastInstrCost()
2226 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i32, 3 }, in getCastInstrCost()
2228 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i64, 4 }, in getCastInstrCost()
2229 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i32, 5 }, in getCastInstrCost()
2230 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i16, 4 }, in getCastInstrCost()
2231 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i64, 9 }, in getCastInstrCost()
2232 { ISD::TRUNCATE, MVT::v16i1, MVT::v16i64, 11 }, in getCastInstrCost()
2234 { ISD::TRUNCATE, MVT::v16i16, MVT::v16i32, 6 }, in getCastInstrCost()
2235 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i32, 6 }, in getCastInstrCost()
2236 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i16, 2 }, // and+extract+packuswb in getCastInstrCost()
2237 { ISD::TRUNCATE, MVT::v16i8, MVT::v8i32, 5 }, in getCastInstrCost()
2238 { ISD::TRUNCATE, MVT::v8i16, MVT::v8i32, 5 }, in getCastInstrCost()
2239 { ISD::TRUNCATE, MVT::v16i8, MVT::v4i64, 5 }, in getCastInstrCost()
2240 { ISD::TRUNCATE, MVT::v8i16, MVT::v4i64, 3 }, // and+extract+2*packusdw in getCastInstrCost()
2241 { ISD::TRUNCATE, MVT::v4i32, MVT::v4i64, 2 }, in getCastInstrCost()
2243 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i1, 3 }, in getCastInstrCost()
2244 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i1, 3 }, in getCastInstrCost()
2245 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i1, 8 }, in getCastInstrCost()
2246 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v16i8, 4 }, in getCastInstrCost()
2247 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v16i8, 2 }, in getCastInstrCost()
2248 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i16, 4 }, in getCastInstrCost()
2249 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v8i16, 2 }, in getCastInstrCost()
2250 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i32, 2 }, in getCastInstrCost()
2251 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i32, 2 }, in getCastInstrCost()
2252 { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i32, 4 }, in getCastInstrCost()
2253 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v2i64, 5 }, in getCastInstrCost()
2254 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i64, 8 }, in getCastInstrCost()
2256 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i1, 7 }, in getCastInstrCost()
2257 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i1, 7 }, in getCastInstrCost()
2258 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i1, 6 }, in getCastInstrCost()
2259 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v16i8, 4 }, in getCastInstrCost()
2260 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v16i8, 2 }, in getCastInstrCost()
2261 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i16, 4 }, in getCastInstrCost()
2262 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v8i16, 2 }, in getCastInstrCost()
2263 { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i32, 4 }, in getCastInstrCost()
2264 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i32, 4 }, in getCastInstrCost()
2265 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 5 }, in getCastInstrCost()
2266 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i32, 6 }, in getCastInstrCost()
2267 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i32, 8 }, in getCastInstrCost()
2268 { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i32, 10 }, in getCastInstrCost()
2269 { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i64, 10 }, in getCastInstrCost()
2270 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i64, 18 }, in getCastInstrCost()
2271 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 5 }, in getCastInstrCost()
2272 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i64, 10 }, in getCastInstrCost()
2274 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v8f32, 2 }, in getCastInstrCost()
2275 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v4f64, 2 }, in getCastInstrCost()
2276 { ISD::FP_TO_SINT, MVT::v32i8, MVT::v8f32, 2 }, in getCastInstrCost()
2277 { ISD::FP_TO_SINT, MVT::v32i8, MVT::v4f64, 2 }, in getCastInstrCost()
2278 { ISD::FP_TO_SINT, MVT::v8i16, MVT::v8f32, 2 }, in getCastInstrCost()
2279 { ISD::FP_TO_SINT, MVT::v8i16, MVT::v4f64, 2 }, in getCastInstrCost()
2280 { ISD::FP_TO_SINT, MVT::v16i16, MVT::v8f32, 2 }, in getCastInstrCost()
2281 { ISD::FP_TO_SINT, MVT::v16i16, MVT::v4f64, 2 }, in getCastInstrCost()
2282 { ISD::FP_TO_SINT, MVT::v4i32, MVT::v4f64, 2 }, in getCastInstrCost()
2283 { ISD::FP_TO_SINT, MVT::v8i32, MVT::v8f32, 2 }, in getCastInstrCost()
2284 { ISD::FP_TO_SINT, MVT::v8i32, MVT::v8f64, 5 }, in getCastInstrCost()
2286 { ISD::FP_TO_UINT, MVT::v16i8, MVT::v8f32, 2 }, in getCastInstrCost()
2287 { ISD::FP_TO_UINT, MVT::v16i8, MVT::v4f64, 2 }, in getCastInstrCost()
2288 { ISD::FP_TO_UINT, MVT::v32i8, MVT::v8f32, 2 }, in getCastInstrCost()
2289 { ISD::FP_TO_UINT, MVT::v32i8, MVT::v4f64, 2 }, in getCastInstrCost()
2290 { ISD::FP_TO_UINT, MVT::v8i16, MVT::v8f32, 2 }, in getCastInstrCost()
2291 { ISD::FP_TO_UINT, MVT::v8i16, MVT::v4f64, 2 }, in getCastInstrCost()
2292 { ISD::FP_TO_UINT, MVT::v16i16, MVT::v8f32, 2 }, in getCastInstrCost()
2293 { ISD::FP_TO_UINT, MVT::v16i16, MVT::v4f64, 2 }, in getCastInstrCost()
2294 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f32, 3 }, in getCastInstrCost()
2295 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v2f64, 4 }, in getCastInstrCost()
2296 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f64, 6 }, in getCastInstrCost()
2297 { ISD::FP_TO_UINT, MVT::v8i32, MVT::v8f32, 7 }, in getCastInstrCost()
2298 { ISD::FP_TO_UINT, MVT::v8i32, MVT::v4f64, 7 }, in getCastInstrCost()
2300 { ISD::FP_EXTEND, MVT::v4f64, MVT::v4f32, 1 }, in getCastInstrCost()
2301 { ISD::FP_ROUND, MVT::v4f32, MVT::v4f64, 1 }, in getCastInstrCost()
2305 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v16i8, 1 }, in getCastInstrCost()
2306 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v16i8, 1 }, in getCastInstrCost()
2307 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v16i8, 1 }, in getCastInstrCost()
2308 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v16i8, 1 }, in getCastInstrCost()
2309 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v16i8, 1 }, in getCastInstrCost()
2310 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v16i8, 1 }, in getCastInstrCost()
2311 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v8i16, 1 }, in getCastInstrCost()
2312 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v8i16, 1 }, in getCastInstrCost()
2313 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v8i16, 1 }, in getCastInstrCost()
2314 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v8i16, 1 }, in getCastInstrCost()
2315 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v4i32, 1 }, in getCastInstrCost()
2316 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v4i32, 1 }, in getCastInstrCost()
2319 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i8, 1 }, // PMOVXZBQ in getCastInstrCost()
2320 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i16, 1 }, // PMOVXZWQ in getCastInstrCost()
2321 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i8, 1 }, // PMOVXZBD in getCastInstrCost()
2323 { ISD::TRUNCATE, MVT::v16i8, MVT::v4i32, 2 }, in getCastInstrCost()
2324 { ISD::TRUNCATE, MVT::v8i16, MVT::v4i32, 2 }, in getCastInstrCost()
2325 { ISD::TRUNCATE, MVT::v16i8, MVT::v2i64, 2 }, in getCastInstrCost()
2327 { ISD::SINT_TO_FP, MVT::f32, MVT::i32, 1 }, in getCastInstrCost()
2328 { ISD::SINT_TO_FP, MVT::f64, MVT::i32, 1 }, in getCastInstrCost()
2329 { ISD::SINT_TO_FP, MVT::f32, MVT::i64, 1 }, in getCastInstrCost()
2330 { ISD::SINT_TO_FP, MVT::f64, MVT::i64, 1 }, in getCastInstrCost()
2331 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v16i8, 1 }, in getCastInstrCost()
2332 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v16i8, 1 }, in getCastInstrCost()
2333 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v8i16, 1 }, in getCastInstrCost()
2334 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v8i16, 1 }, in getCastInstrCost()
2335 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i32, 1 }, in getCastInstrCost()
2336 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v4i32, 1 }, in getCastInstrCost()
2337 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i32, 2 }, in getCastInstrCost()
2339 { ISD::UINT_TO_FP, MVT::f32, MVT::i32, 1 }, in getCastInstrCost()
2340 { ISD::UINT_TO_FP, MVT::f64, MVT::i32, 1 }, in getCastInstrCost()
2341 { ISD::UINT_TO_FP, MVT::f32, MVT::i64, 4 }, in getCastInstrCost()
2342 { ISD::UINT_TO_FP, MVT::f64, MVT::i64, 4 }, in getCastInstrCost()
2343 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v16i8, 1 }, in getCastInstrCost()
2344 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v16i8, 1 }, in getCastInstrCost()
2345 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v8i16, 1 }, in getCastInstrCost()
2346 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v8i16, 1 }, in getCastInstrCost()
2347 { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i32, 3 }, in getCastInstrCost()
2348 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 3 }, in getCastInstrCost()
2349 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v4i32, 2 }, in getCastInstrCost()
2350 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v2i64, 12 }, in getCastInstrCost()
2351 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i64, 22 }, in getCastInstrCost()
2352 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 4 }, in getCastInstrCost()
2354 { ISD::FP_TO_SINT, MVT::i32, MVT::f32, 1 }, in getCastInstrCost()
2355 { ISD::FP_TO_SINT, MVT::i64, MVT::f32, 1 }, in getCastInstrCost()
2356 { ISD::FP_TO_SINT, MVT::i32, MVT::f64, 1 }, in getCastInstrCost()
2357 { ISD::FP_TO_SINT, MVT::i64, MVT::f64, 1 }, in getCastInstrCost()
2358 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v4f32, 2 }, in getCastInstrCost()
2359 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v2f64, 2 }, in getCastInstrCost()
2360 { ISD::FP_TO_SINT, MVT::v8i16, MVT::v4f32, 1 }, in getCastInstrCost()
2361 { ISD::FP_TO_SINT, MVT::v8i16, MVT::v2f64, 1 }, in getCastInstrCost()
2362 { ISD::FP_TO_SINT, MVT::v4i32, MVT::v4f32, 1 }, in getCastInstrCost()
2363 { ISD::FP_TO_SINT, MVT::v4i32, MVT::v2f64, 1 }, in getCastInstrCost()
2365 { ISD::FP_TO_UINT, MVT::i32, MVT::f32, 1 }, in getCastInstrCost()
2366 { ISD::FP_TO_UINT, MVT::i64, MVT::f32, 4 }, in getCastInstrCost()
2367 { ISD::FP_TO_UINT, MVT::i32, MVT::f64, 1 }, in getCastInstrCost()
2368 { ISD::FP_TO_UINT, MVT::i64, MVT::f64, 4 }, in getCastInstrCost()
2369 { ISD::FP_TO_UINT, MVT::v16i8, MVT::v4f32, 2 }, in getCastInstrCost()
2370 { ISD::FP_TO_UINT, MVT::v16i8, MVT::v2f64, 2 }, in getCastInstrCost()
2371 { ISD::FP_TO_UINT, MVT::v8i16, MVT::v4f32, 1 }, in getCastInstrCost()
2372 { ISD::FP_TO_UINT, MVT::v8i16, MVT::v2f64, 1 }, in getCastInstrCost()
2373 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f32, 4 }, in getCastInstrCost()
2374 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v2f64, 4 }, in getCastInstrCost()
2381 { ISD::SINT_TO_FP, MVT::f32, MVT::i32, 3 }, in getCastInstrCost()
2382 { ISD::SINT_TO_FP, MVT::f64, MVT::i32, 3 }, in getCastInstrCost()
2383 { ISD::SINT_TO_FP, MVT::f32, MVT::i64, 3 }, in getCastInstrCost()
2384 { ISD::SINT_TO_FP, MVT::f64, MVT::i64, 3 }, in getCastInstrCost()
2385 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v16i8, 3 }, in getCastInstrCost()
2386 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v16i8, 4 }, in getCastInstrCost()
2387 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v8i16, 3 }, in getCastInstrCost()
2388 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v8i16, 4 }, in getCastInstrCost()
2389 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i32, 3 }, in getCastInstrCost()
2390 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v4i32, 4 }, in getCastInstrCost()
2391 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v2i64, 8 }, in getCastInstrCost()
2392 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v2i64, 8 }, in getCastInstrCost()
2394 { ISD::UINT_TO_FP, MVT::f32, MVT::i32, 3 }, in getCastInstrCost()
2395 { ISD::UINT_TO_FP, MVT::f64, MVT::i32, 3 }, in getCastInstrCost()
2396 { ISD::UINT_TO_FP, MVT::f32, MVT::i64, 8 }, in getCastInstrCost()
2397 { ISD::UINT_TO_FP, MVT::f64, MVT::i64, 9 }, in getCastInstrCost()
2398 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v16i8, 4 }, in getCastInstrCost()
2399 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v16i8, 4 }, in getCastInstrCost()
2400 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v8i16, 4 }, in getCastInstrCost()
2401 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v8i16, 4 }, in getCastInstrCost()
2402 { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i32, 7 }, in getCastInstrCost()
2403 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v4i32, 7 }, in getCastInstrCost()
2404 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 5 }, in getCastInstrCost()
2405 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 15 }, in getCastInstrCost()
2406 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v2i64, 18 }, in getCastInstrCost()
2408 { ISD::FP_TO_SINT, MVT::i32, MVT::f32, 4 }, in getCastInstrCost()
2409 { ISD::FP_TO_SINT, MVT::i64, MVT::f32, 4 }, in getCastInstrCost()
2410 { ISD::FP_TO_SINT, MVT::i32, MVT::f64, 4 }, in getCastInstrCost()
2411 { ISD::FP_TO_SINT, MVT::i64, MVT::f64, 4 }, in getCastInstrCost()
2412 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v4f32, 6 }, in getCastInstrCost()
2413 { ISD::FP_TO_SINT, MVT::v16i8, MVT::v2f64, 6 }, in getCastInstrCost()
2414 { ISD::FP_TO_SINT, MVT::v8i16, MVT::v4f32, 5 }, in getCastInstrCost()
2415 { ISD::FP_TO_SINT, MVT::v8i16, MVT::v2f64, 5 }, in getCastInstrCost()
2416 { ISD::FP_TO_SINT, MVT::v4i32, MVT::v4f32, 4 }, in getCastInstrCost()
2417 { ISD::FP_TO_SINT, MVT::v4i32, MVT::v2f64, 4 }, in getCastInstrCost()
2419 { ISD::FP_TO_UINT, MVT::i32, MVT::f32, 4 }, in getCastInstrCost()
2420 { ISD::FP_TO_UINT, MVT::i64, MVT::f32, 4 }, in getCastInstrCost()
2421 { ISD::FP_TO_UINT, MVT::i32, MVT::f64, 4 }, in getCastInstrCost()
2422 { ISD::FP_TO_UINT, MVT::i64, MVT::f64, 15 }, in getCastInstrCost()
2423 { ISD::FP_TO_UINT, MVT::v16i8, MVT::v4f32, 6 }, in getCastInstrCost()
2424 { ISD::FP_TO_UINT, MVT::v16i8, MVT::v2f64, 6 }, in getCastInstrCost()
2425 { ISD::FP_TO_UINT, MVT::v8i16, MVT::v4f32, 5 }, in getCastInstrCost()
2426 { ISD::FP_TO_UINT, MVT::v8i16, MVT::v2f64, 5 }, in getCastInstrCost()
2427 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f32, 8 }, in getCastInstrCost()
2428 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v2f64, 8 }, in getCastInstrCost()
2430 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v16i8, 4 }, in getCastInstrCost()
2431 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v16i8, 4 }, in getCastInstrCost()
2432 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v16i8, 2 }, in getCastInstrCost()
2433 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v16i8, 3 }, in getCastInstrCost()
2434 { ISD::ZERO_EXTEND, MVT::v8i16, MVT::v16i8, 1 }, in getCastInstrCost()
2435 { ISD::SIGN_EXTEND, MVT::v8i16, MVT::v16i8, 2 }, in getCastInstrCost()
2436 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v8i16, 2 }, in getCastInstrCost()
2437 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v8i16, 3 }, in getCastInstrCost()
2438 { ISD::ZERO_EXTEND, MVT::v4i32, MVT::v8i16, 1 }, in getCastInstrCost()
2439 { ISD::SIGN_EXTEND, MVT::v4i32, MVT::v8i16, 2 }, in getCastInstrCost()
2440 { ISD::ZERO_EXTEND, MVT::v2i64, MVT::v4i32, 1 }, in getCastInstrCost()
2441 { ISD::SIGN_EXTEND, MVT::v2i64, MVT::v4i32, 2 }, in getCastInstrCost()
2444 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i32, 1 }, // PSHUFD in getCastInstrCost()
2445 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i16, 2 }, // PUNPCKLWD+DQ in getCastInstrCost()
2446 { ISD::TRUNCATE, MVT::v2i1, MVT::v2i8, 3 }, // PUNPCKLBW+WD+PSHUFD in getCastInstrCost()
2447 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i16, 1 }, // PUNPCKLWD in getCastInstrCost()
2448 { ISD::TRUNCATE, MVT::v4i1, MVT::v4i8, 2 }, // PUNPCKLBW+WD in getCastInstrCost()
2449 { ISD::TRUNCATE, MVT::v8i1, MVT::v8i8, 1 }, // PUNPCKLBW in getCastInstrCost()
2451 { ISD::TRUNCATE, MVT::v16i8, MVT::v8i16, 2 }, // PAND+PACKUSWB in getCastInstrCost()
2452 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i16, 3 }, in getCastInstrCost()
2453 { ISD::TRUNCATE, MVT::v16i8, MVT::v4i32, 3 }, // PAND+2*PACKUSWB in getCastInstrCost()
2454 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i32, 7 }, in getCastInstrCost()
2455 { ISD::TRUNCATE, MVT::v2i16, MVT::v2i32, 1 }, in getCastInstrCost()
2456 { ISD::TRUNCATE, MVT::v8i16, MVT::v4i32, 3 }, in getCastInstrCost()
2457 { ISD::TRUNCATE, MVT::v8i16, MVT::v8i32, 5 }, in getCastInstrCost()
2458 { ISD::TRUNCATE, MVT::v16i16, MVT::v16i32,10 }, in getCastInstrCost()
2459 { ISD::TRUNCATE, MVT::v16i8, MVT::v2i64, 4 }, // PAND+3*PACKUSWB in getCastInstrCost()
2460 { ISD::TRUNCATE, MVT::v8i16, MVT::v2i64, 2 }, // PSHUFD+PSHUFLW in getCastInstrCost()
2461 { ISD::TRUNCATE, MVT::v4i32, MVT::v2i64, 1 }, // PSHUFD in getCastInstrCost()
2476 AVX512BWConversionTbl, ISD, SimpleDstTy, SimpleSrcTy)) in getCastInstrCost()
2481 AVX512DQConversionTbl, ISD, SimpleDstTy, SimpleSrcTy)) in getCastInstrCost()
2486 AVX512FConversionTbl, ISD, SimpleDstTy, SimpleSrcTy)) in getCastInstrCost()
2492 AVX512BWVLConversionTbl, ISD, SimpleDstTy, SimpleSrcTy)) in getCastInstrCost()
2497 AVX512DQVLConversionTbl, ISD, SimpleDstTy, SimpleSrcTy)) in getCastInstrCost()
2501 if (const auto *Entry = ConvertCostTableLookup(AVX512VLConversionTbl, ISD, in getCastInstrCost()
2506 if (const auto *Entry = ConvertCostTableLookup(AVX2ConversionTbl, ISD, in getCastInstrCost()
2512 if (const auto *Entry = ConvertCostTableLookup(AVXConversionTbl, ISD, in getCastInstrCost()
2518 if (const auto *Entry = ConvertCostTableLookup(SSE41ConversionTbl, ISD, in getCastInstrCost()
2524 if (const auto *Entry = ConvertCostTableLookup(SSE2ConversionTbl, ISD, in getCastInstrCost()
2536 if (ISD == ISD::TRUNCATE && LTSrc.second == LTDest.second) in getCastInstrCost()
2542 AVX512BWConversionTbl, ISD, LTDest.second, LTSrc.second)) in getCastInstrCost()
2547 AVX512DQConversionTbl, ISD, LTDest.second, LTSrc.second)) in getCastInstrCost()
2552 AVX512FConversionTbl, ISD, LTDest.second, LTSrc.second)) in getCastInstrCost()
2557 if (const auto *Entry = ConvertCostTableLookup(AVX512BWVLConversionTbl, ISD, in getCastInstrCost()
2562 if (const auto *Entry = ConvertCostTableLookup(AVX512DQVLConversionTbl, ISD, in getCastInstrCost()
2567 if (const auto *Entry = ConvertCostTableLookup(AVX512VLConversionTbl, ISD, in getCastInstrCost()
2572 if (const auto *Entry = ConvertCostTableLookup(AVX2ConversionTbl, ISD, in getCastInstrCost()
2577 if (const auto *Entry = ConvertCostTableLookup(AVXConversionTbl, ISD, in getCastInstrCost()
2582 if (const auto *Entry = ConvertCostTableLookup(SSE41ConversionTbl, ISD, in getCastInstrCost()
2587 if (const auto *Entry = ConvertCostTableLookup(SSE2ConversionTbl, ISD, in getCastInstrCost()
2593 if ((ISD == ISD::SINT_TO_FP || ISD == ISD::UINT_TO_FP) && in getCastInstrCost()
2597 (ISD == ISD::SINT_TO_FP) ? Instruction::SExt : Instruction::ZExt; in getCastInstrCost()
2610 if ((ISD == ISD::FP_TO_SINT || ISD == ISD::FP_TO_UINT) && in getCastInstrCost()
2637 int ISD = TLI->InstructionOpcodeToISD(Opcode); in getCmpSelInstrCost() local
2638 assert(ISD && "Invalid opcode"); in getCmpSelInstrCost()
2696 { ISD::SETCC, MVT::v2i64, 2 }, in getCmpSelInstrCost()
2700 { ISD::SETCC, MVT::v32i16, 1 }, in getCmpSelInstrCost()
2701 { ISD::SETCC, MVT::v64i8, 1 }, in getCmpSelInstrCost()
2703 { ISD::SELECT, MVT::v32i16, 1 }, in getCmpSelInstrCost()
2704 { ISD::SELECT, MVT::v64i8, 1 }, in getCmpSelInstrCost()
2708 { ISD::SETCC, MVT::v8i64, 1 }, in getCmpSelInstrCost()
2709 { ISD::SETCC, MVT::v16i32, 1 }, in getCmpSelInstrCost()
2710 { ISD::SETCC, MVT::v8f64, 1 }, in getCmpSelInstrCost()
2711 { ISD::SETCC, MVT::v16f32, 1 }, in getCmpSelInstrCost()
2713 { ISD::SELECT, MVT::v8i64, 1 }, in getCmpSelInstrCost()
2714 { ISD::SELECT, MVT::v4i64, 1 }, in getCmpSelInstrCost()
2715 { ISD::SELECT, MVT::v2i64, 1 }, in getCmpSelInstrCost()
2716 { ISD::SELECT, MVT::v16i32, 1 }, in getCmpSelInstrCost()
2717 { ISD::SELECT, MVT::v8i32, 1 }, in getCmpSelInstrCost()
2718 { ISD::SELECT, MVT::v4i32, 1 }, in getCmpSelInstrCost()
2719 { ISD::SELECT, MVT::v8f64, 1 }, in getCmpSelInstrCost()
2720 { ISD::SELECT, MVT::v4f64, 1 }, in getCmpSelInstrCost()
2721 { ISD::SELECT, MVT::v2f64, 1 }, in getCmpSelInstrCost()
2722 { ISD::SELECT, MVT::f64, 1 }, in getCmpSelInstrCost()
2723 { ISD::SELECT, MVT::v16f32, 1 }, in getCmpSelInstrCost()
2724 { ISD::SELECT, MVT::v8f32 , 1 }, in getCmpSelInstrCost()
2725 { ISD::SELECT, MVT::v4f32, 1 }, in getCmpSelInstrCost()
2726 { ISD::SELECT, MVT::f32 , 1 }, in getCmpSelInstrCost()
2728 { ISD::SETCC, MVT::v32i16, 2 }, // FIXME: should probably be 4 in getCmpSelInstrCost()
2729 { ISD::SETCC, MVT::v64i8, 2 }, // FIXME: should probably be 4 in getCmpSelInstrCost()
2731 { ISD::SELECT, MVT::v32i16, 2 }, in getCmpSelInstrCost()
2732 { ISD::SELECT, MVT::v16i16, 1 }, in getCmpSelInstrCost()
2733 { ISD::SELECT, MVT::v8i16, 1 }, in getCmpSelInstrCost()
2734 { ISD::SELECT, MVT::v64i8, 2 }, in getCmpSelInstrCost()
2735 { ISD::SELECT, MVT::v32i8, 1 }, in getCmpSelInstrCost()
2736 { ISD::SELECT, MVT::v16i8, 1 }, in getCmpSelInstrCost()
2740 { ISD::SETCC, MVT::v4i64, 1 }, in getCmpSelInstrCost()
2741 { ISD::SETCC, MVT::v8i32, 1 }, in getCmpSelInstrCost()
2742 { ISD::SETCC, MVT::v16i16, 1 }, in getCmpSelInstrCost()
2743 { ISD::SETCC, MVT::v32i8, 1 }, in getCmpSelInstrCost()
2745 { ISD::SELECT, MVT::v4f64, 2 }, // vblendvpd in getCmpSelInstrCost()
2746 { ISD::SELECT, MVT::v8f32, 2 }, // vblendvps in getCmpSelInstrCost()
2747 { ISD::SELECT, MVT::v4i64, 2 }, // pblendvb in getCmpSelInstrCost()
2748 { ISD::SELECT, MVT::v8i32, 2 }, // pblendvb in getCmpSelInstrCost()
2749 { ISD::SELECT, MVT::v16i16, 2 }, // pblendvb in getCmpSelInstrCost()
2750 { ISD::SELECT, MVT::v32i8, 2 }, // pblendvb in getCmpSelInstrCost()
2754 { ISD::SETCC, MVT::v4f64, 1 }, in getCmpSelInstrCost()
2755 { ISD::SETCC, MVT::v8f32, 1 }, in getCmpSelInstrCost()
2757 { ISD::SETCC, MVT::v4i64, 4 }, in getCmpSelInstrCost()
2758 { ISD::SETCC, MVT::v8i32, 4 }, in getCmpSelInstrCost()
2759 { ISD::SETCC, MVT::v16i16, 4 }, in getCmpSelInstrCost()
2760 { ISD::SETCC, MVT::v32i8, 4 }, in getCmpSelInstrCost()
2762 { ISD::SELECT, MVT::v4f64, 3 }, // vblendvpd in getCmpSelInstrCost()
2763 { ISD::SELECT, MVT::v8f32, 3 }, // vblendvps in getCmpSelInstrCost()
2764 { ISD::SELECT, MVT::v4i64, 3 }, // vblendvpd in getCmpSelInstrCost()
2765 { ISD::SELECT, MVT::v8i32, 3 }, // vblendvps in getCmpSelInstrCost()
2766 { ISD::SELECT, MVT::v16i16, 3 }, // vandps + vandnps + vorps in getCmpSelInstrCost()
2767 { ISD::SELECT, MVT::v32i8, 3 }, // vandps + vandnps + vorps in getCmpSelInstrCost()
2771 { ISD::SETCC, MVT::v2i64, 1 }, in getCmpSelInstrCost()
2775 { ISD::SETCC, MVT::v2f64, 1 }, in getCmpSelInstrCost()
2776 { ISD::SETCC, MVT::v4f32, 1 }, in getCmpSelInstrCost()
2778 { ISD::SELECT, MVT::v2f64, 2 }, // blendvpd in getCmpSelInstrCost()
2779 { ISD::SELECT, MVT::f64, 2 }, // blendvpd in getCmpSelInstrCost()
2780 { ISD::SELECT, MVT::v4f32, 2 }, // blendvps in getCmpSelInstrCost()
2781 { ISD::SELECT, MVT::f32 , 2 }, // blendvps in getCmpSelInstrCost()
2782 { ISD::SELECT, MVT::v2i64, 2 }, // pblendvb in getCmpSelInstrCost()
2783 { ISD::SELECT, MVT::v4i32, 2 }, // pblendvb in getCmpSelInstrCost()
2784 { ISD::SELECT, MVT::v8i16, 2 }, // pblendvb in getCmpSelInstrCost()
2785 { ISD::SELECT, MVT::v16i8, 2 }, // pblendvb in getCmpSelInstrCost()
2789 { ISD::SETCC, MVT::v2f64, 2 }, in getCmpSelInstrCost()
2790 { ISD::SETCC, MVT::f64, 1 }, in getCmpSelInstrCost()
2791 { ISD::SETCC, MVT::v2i64, 5 }, // pcmpeqd/pcmpgtd expansion in getCmpSelInstrCost()
2792 { ISD::SETCC, MVT::v4i32, 1 }, in getCmpSelInstrCost()
2793 { ISD::SETCC, MVT::v8i16, 1 }, in getCmpSelInstrCost()
2794 { ISD::SETCC, MVT::v16i8, 1 }, in getCmpSelInstrCost()
2796 { ISD::SELECT, MVT::v2f64, 2 }, // andpd + andnpd + orpd in getCmpSelInstrCost()
2797 { ISD::SELECT, MVT::f64, 2 }, // andpd + andnpd + orpd in getCmpSelInstrCost()
2798 { ISD::SELECT, MVT::v2i64, 2 }, // pand + pandn + por in getCmpSelInstrCost()
2799 { ISD::SELECT, MVT::v4i32, 2 }, // pand + pandn + por in getCmpSelInstrCost()
2800 { ISD::SELECT, MVT::v8i16, 2 }, // pand + pandn + por in getCmpSelInstrCost()
2801 { ISD::SELECT, MVT::v16i8, 2 }, // pand + pandn + por in getCmpSelInstrCost()
2805 { ISD::SETCC, MVT::v4f32, 2 }, in getCmpSelInstrCost()
2806 { ISD::SETCC, MVT::f32, 1 }, in getCmpSelInstrCost()
2808 { ISD::SELECT, MVT::v4f32, 2 }, // andps + andnps + orps in getCmpSelInstrCost()
2809 { ISD::SELECT, MVT::f32, 2 }, // andps + andnps + orps in getCmpSelInstrCost()
2813 if (const auto *Entry = CostTableLookup(SLMCostTbl, ISD, MTy)) in getCmpSelInstrCost()
2817 if (const auto *Entry = CostTableLookup(AVX512BWCostTbl, ISD, MTy)) in getCmpSelInstrCost()
2821 if (const auto *Entry = CostTableLookup(AVX512CostTbl, ISD, MTy)) in getCmpSelInstrCost()
2825 if (const auto *Entry = CostTableLookup(AVX2CostTbl, ISD, MTy)) in getCmpSelInstrCost()
2829 if (const auto *Entry = CostTableLookup(AVX1CostTbl, ISD, MTy)) in getCmpSelInstrCost()
2833 if (const auto *Entry = CostTableLookup(SSE42CostTbl, ISD, MTy)) in getCmpSelInstrCost()
2837 if (const auto *Entry = CostTableLookup(SSE41CostTbl, ISD, MTy)) in getCmpSelInstrCost()
2841 if (const auto *Entry = CostTableLookup(SSE2CostTbl, ISD, MTy)) in getCmpSelInstrCost()
2845 if (const auto *Entry = CostTableLookup(SSE1CostTbl, ISD, MTy)) in getCmpSelInstrCost()
2867 { ISD::CTPOP, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2868 { ISD::CTPOP, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2869 { ISD::CTPOP, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2870 { ISD::CTPOP, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2871 { ISD::CTPOP, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2872 { ISD::CTPOP, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2875 { ISD::CTPOP, MVT::v8i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2876 { ISD::CTPOP, MVT::v16i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2877 { ISD::CTPOP, MVT::v4i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2878 { ISD::CTPOP, MVT::v8i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2879 { ISD::CTPOP, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2880 { ISD::CTPOP, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2883 { ISD::CTLZ, MVT::v8i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2884 { ISD::CTLZ, MVT::v16i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2885 { ISD::CTLZ, MVT::v32i16, 8 }, in getTypeBasedIntrinsicInstrCost()
2886 { ISD::CTLZ, MVT::v64i8, 20 }, in getTypeBasedIntrinsicInstrCost()
2887 { ISD::CTLZ, MVT::v4i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2888 { ISD::CTLZ, MVT::v8i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2889 { ISD::CTLZ, MVT::v16i16, 4 }, in getTypeBasedIntrinsicInstrCost()
2890 { ISD::CTLZ, MVT::v32i8, 10 }, in getTypeBasedIntrinsicInstrCost()
2891 { ISD::CTLZ, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2892 { ISD::CTLZ, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2893 { ISD::CTLZ, MVT::v8i16, 4 }, in getTypeBasedIntrinsicInstrCost()
2894 { ISD::CTLZ, MVT::v16i8, 4 }, in getTypeBasedIntrinsicInstrCost()
2897 { ISD::ABS, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2898 { ISD::ABS, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2899 { ISD::BITREVERSE, MVT::v8i64, 3 }, in getTypeBasedIntrinsicInstrCost()
2900 { ISD::BITREVERSE, MVT::v16i32, 3 }, in getTypeBasedIntrinsicInstrCost()
2901 { ISD::BITREVERSE, MVT::v32i16, 3 }, in getTypeBasedIntrinsicInstrCost()
2902 { ISD::BITREVERSE, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2903 { ISD::BSWAP, MVT::v8i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2904 { ISD::BSWAP, MVT::v16i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2905 { ISD::BSWAP, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2906 { ISD::CTLZ, MVT::v8i64, 23 }, in getTypeBasedIntrinsicInstrCost()
2907 { ISD::CTLZ, MVT::v16i32, 22 }, in getTypeBasedIntrinsicInstrCost()
2908 { ISD::CTLZ, MVT::v32i16, 18 }, in getTypeBasedIntrinsicInstrCost()
2909 { ISD::CTLZ, MVT::v64i8, 17 }, in getTypeBasedIntrinsicInstrCost()
2910 { ISD::CTPOP, MVT::v8i64, 7 }, in getTypeBasedIntrinsicInstrCost()
2911 { ISD::CTPOP, MVT::v16i32, 11 }, in getTypeBasedIntrinsicInstrCost()
2912 { ISD::CTPOP, MVT::v32i16, 9 }, in getTypeBasedIntrinsicInstrCost()
2913 { ISD::CTPOP, MVT::v64i8, 6 }, in getTypeBasedIntrinsicInstrCost()
2914 { ISD::CTTZ, MVT::v8i64, 10 }, in getTypeBasedIntrinsicInstrCost()
2915 { ISD::CTTZ, MVT::v16i32, 14 }, in getTypeBasedIntrinsicInstrCost()
2916 { ISD::CTTZ, MVT::v32i16, 12 }, in getTypeBasedIntrinsicInstrCost()
2917 { ISD::CTTZ, MVT::v64i8, 9 }, in getTypeBasedIntrinsicInstrCost()
2918 { ISD::SADDSAT, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2919 { ISD::SADDSAT, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2920 { ISD::SMAX, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2921 { ISD::SMAX, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2922 { ISD::SMIN, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2923 { ISD::SMIN, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2924 { ISD::SSUBSAT, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2925 { ISD::SSUBSAT, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2926 { ISD::UADDSAT, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2927 { ISD::UADDSAT, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2928 { ISD::UMAX, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2929 { ISD::UMAX, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2930 { ISD::UMIN, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2931 { ISD::UMIN, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2932 { ISD::USUBSAT, MVT::v32i16, 1 }, in getTypeBasedIntrinsicInstrCost()
2933 { ISD::USUBSAT, MVT::v64i8, 1 }, in getTypeBasedIntrinsicInstrCost()
2936 { ISD::ABS, MVT::v8i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2937 { ISD::ABS, MVT::v16i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2938 { ISD::ABS, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
2939 { ISD::ABS, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2940 { ISD::ABS, MVT::v4i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2941 { ISD::ABS, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2942 { ISD::BITREVERSE, MVT::v8i64, 36 }, in getTypeBasedIntrinsicInstrCost()
2943 { ISD::BITREVERSE, MVT::v16i32, 24 }, in getTypeBasedIntrinsicInstrCost()
2944 { ISD::BITREVERSE, MVT::v32i16, 10 }, in getTypeBasedIntrinsicInstrCost()
2945 { ISD::BITREVERSE, MVT::v64i8, 10 }, in getTypeBasedIntrinsicInstrCost()
2946 { ISD::BSWAP, MVT::v8i64, 4 }, in getTypeBasedIntrinsicInstrCost()
2947 { ISD::BSWAP, MVT::v16i32, 4 }, in getTypeBasedIntrinsicInstrCost()
2948 { ISD::BSWAP, MVT::v32i16, 4 }, in getTypeBasedIntrinsicInstrCost()
2949 { ISD::CTLZ, MVT::v8i64, 29 }, in getTypeBasedIntrinsicInstrCost()
2950 { ISD::CTLZ, MVT::v16i32, 35 }, in getTypeBasedIntrinsicInstrCost()
2951 { ISD::CTLZ, MVT::v32i16, 28 }, in getTypeBasedIntrinsicInstrCost()
2952 { ISD::CTLZ, MVT::v64i8, 18 }, in getTypeBasedIntrinsicInstrCost()
2953 { ISD::CTPOP, MVT::v8i64, 16 }, in getTypeBasedIntrinsicInstrCost()
2954 { ISD::CTPOP, MVT::v16i32, 24 }, in getTypeBasedIntrinsicInstrCost()
2955 { ISD::CTPOP, MVT::v32i16, 18 }, in getTypeBasedIntrinsicInstrCost()
2956 { ISD::CTPOP, MVT::v64i8, 12 }, in getTypeBasedIntrinsicInstrCost()
2957 { ISD::CTTZ, MVT::v8i64, 20 }, in getTypeBasedIntrinsicInstrCost()
2958 { ISD::CTTZ, MVT::v16i32, 28 }, in getTypeBasedIntrinsicInstrCost()
2959 { ISD::CTTZ, MVT::v32i16, 24 }, in getTypeBasedIntrinsicInstrCost()
2960 { ISD::CTTZ, MVT::v64i8, 18 }, in getTypeBasedIntrinsicInstrCost()
2961 { ISD::SMAX, MVT::v8i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2962 { ISD::SMAX, MVT::v16i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2963 { ISD::SMAX, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
2964 { ISD::SMAX, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2965 { ISD::SMAX, MVT::v4i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2966 { ISD::SMAX, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2967 { ISD::SMIN, MVT::v8i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2968 { ISD::SMIN, MVT::v16i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2969 { ISD::SMIN, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
2970 { ISD::SMIN, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2971 { ISD::SMIN, MVT::v4i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2972 { ISD::SMIN, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2973 { ISD::UMAX, MVT::v8i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2974 { ISD::UMAX, MVT::v16i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2975 { ISD::UMAX, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
2976 { ISD::UMAX, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2977 { ISD::UMAX, MVT::v4i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2978 { ISD::UMAX, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2979 { ISD::UMIN, MVT::v8i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2980 { ISD::UMIN, MVT::v16i32, 1 }, in getTypeBasedIntrinsicInstrCost()
2981 { ISD::UMIN, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
2982 { ISD::UMIN, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2983 { ISD::UMIN, MVT::v4i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2984 { ISD::UMIN, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
2985 { ISD::USUBSAT, MVT::v16i32, 2 }, // pmaxud + psubd in getTypeBasedIntrinsicInstrCost()
2986 { ISD::USUBSAT, MVT::v2i64, 2 }, // pmaxuq + psubq in getTypeBasedIntrinsicInstrCost()
2987 { ISD::USUBSAT, MVT::v4i64, 2 }, // pmaxuq + psubq in getTypeBasedIntrinsicInstrCost()
2988 { ISD::USUBSAT, MVT::v8i64, 2 }, // pmaxuq + psubq in getTypeBasedIntrinsicInstrCost()
2989 { ISD::UADDSAT, MVT::v16i32, 3 }, // not + pminud + paddd in getTypeBasedIntrinsicInstrCost()
2990 { ISD::UADDSAT, MVT::v2i64, 3 }, // not + pminuq + paddq in getTypeBasedIntrinsicInstrCost()
2991 { ISD::UADDSAT, MVT::v4i64, 3 }, // not + pminuq + paddq in getTypeBasedIntrinsicInstrCost()
2992 { ISD::UADDSAT, MVT::v8i64, 3 }, // not + pminuq + paddq in getTypeBasedIntrinsicInstrCost()
2993 { ISD::SADDSAT, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
2994 { ISD::SADDSAT, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2995 { ISD::SSUBSAT, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
2996 { ISD::SSUBSAT, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2997 { ISD::UADDSAT, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
2998 { ISD::UADDSAT, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
2999 { ISD::USUBSAT, MVT::v32i16, 2 }, in getTypeBasedIntrinsicInstrCost()
3000 { ISD::USUBSAT, MVT::v64i8, 2 }, in getTypeBasedIntrinsicInstrCost()
3001 { ISD::FMAXNUM, MVT::f32, 2 }, in getTypeBasedIntrinsicInstrCost()
3002 { ISD::FMAXNUM, MVT::v4f32, 2 }, in getTypeBasedIntrinsicInstrCost()
3003 { ISD::FMAXNUM, MVT::v8f32, 2 }, in getTypeBasedIntrinsicInstrCost()
3004 { ISD::FMAXNUM, MVT::v16f32, 2 }, in getTypeBasedIntrinsicInstrCost()
3005 { ISD::FMAXNUM, MVT::f64, 2 }, in getTypeBasedIntrinsicInstrCost()
3006 { ISD::FMAXNUM, MVT::v2f64, 2 }, in getTypeBasedIntrinsicInstrCost()
3007 { ISD::FMAXNUM, MVT::v4f64, 2 }, in getTypeBasedIntrinsicInstrCost()
3008 { ISD::FMAXNUM, MVT::v8f64, 2 }, in getTypeBasedIntrinsicInstrCost()
3011 { ISD::BITREVERSE, MVT::v4i64, 4 }, in getTypeBasedIntrinsicInstrCost()
3012 { ISD::BITREVERSE, MVT::v8i32, 4 }, in getTypeBasedIntrinsicInstrCost()
3013 { ISD::BITREVERSE, MVT::v16i16, 4 }, in getTypeBasedIntrinsicInstrCost()
3014 { ISD::BITREVERSE, MVT::v32i8, 4 }, in getTypeBasedIntrinsicInstrCost()
3015 { ISD::BITREVERSE, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3016 { ISD::BITREVERSE, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3017 { ISD::BITREVERSE, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3018 { ISD::BITREVERSE, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3019 { ISD::BITREVERSE, MVT::i64, 3 }, in getTypeBasedIntrinsicInstrCost()
3020 { ISD::BITREVERSE, MVT::i32, 3 }, in getTypeBasedIntrinsicInstrCost()
3021 { ISD::BITREVERSE, MVT::i16, 3 }, in getTypeBasedIntrinsicInstrCost()
3022 { ISD::BITREVERSE, MVT::i8, 3 } in getTypeBasedIntrinsicInstrCost()
3025 { ISD::ABS, MVT::v4i64, 2 }, // VBLENDVPD(X,VPSUBQ(0,X),X) in getTypeBasedIntrinsicInstrCost()
3026 { ISD::ABS, MVT::v8i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3027 { ISD::ABS, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3028 { ISD::ABS, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3029 { ISD::BITREVERSE, MVT::v2i64, 3 }, in getTypeBasedIntrinsicInstrCost()
3030 { ISD::BITREVERSE, MVT::v4i64, 3 }, in getTypeBasedIntrinsicInstrCost()
3031 { ISD::BITREVERSE, MVT::v4i32, 3 }, in getTypeBasedIntrinsicInstrCost()
3032 { ISD::BITREVERSE, MVT::v8i32, 3 }, in getTypeBasedIntrinsicInstrCost()
3033 { ISD::BITREVERSE, MVT::v8i16, 3 }, in getTypeBasedIntrinsicInstrCost()
3034 { ISD::BITREVERSE, MVT::v16i16, 3 }, in getTypeBasedIntrinsicInstrCost()
3035 { ISD::BITREVERSE, MVT::v16i8, 3 }, in getTypeBasedIntrinsicInstrCost()
3036 { ISD::BITREVERSE, MVT::v32i8, 3 }, in getTypeBasedIntrinsicInstrCost()
3037 { ISD::BSWAP, MVT::v4i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3038 { ISD::BSWAP, MVT::v8i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3039 { ISD::BSWAP, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3040 { ISD::CTLZ, MVT::v2i64, 7 }, in getTypeBasedIntrinsicInstrCost()
3041 { ISD::CTLZ, MVT::v4i64, 7 }, in getTypeBasedIntrinsicInstrCost()
3042 { ISD::CTLZ, MVT::v4i32, 5 }, in getTypeBasedIntrinsicInstrCost()
3043 { ISD::CTLZ, MVT::v8i32, 5 }, in getTypeBasedIntrinsicInstrCost()
3044 { ISD::CTLZ, MVT::v8i16, 4 }, in getTypeBasedIntrinsicInstrCost()
3045 { ISD::CTLZ, MVT::v16i16, 4 }, in getTypeBasedIntrinsicInstrCost()
3046 { ISD::CTLZ, MVT::v16i8, 3 }, in getTypeBasedIntrinsicInstrCost()
3047 { ISD::CTLZ, MVT::v32i8, 3 }, in getTypeBasedIntrinsicInstrCost()
3048 { ISD::CTPOP, MVT::v2i64, 3 }, in getTypeBasedIntrinsicInstrCost()
3049 { ISD::CTPOP, MVT::v4i64, 3 }, in getTypeBasedIntrinsicInstrCost()
3050 { ISD::CTPOP, MVT::v4i32, 7 }, in getTypeBasedIntrinsicInstrCost()
3051 { ISD::CTPOP, MVT::v8i32, 7 }, in getTypeBasedIntrinsicInstrCost()
3052 { ISD::CTPOP, MVT::v8i16, 3 }, in getTypeBasedIntrinsicInstrCost()
3053 { ISD::CTPOP, MVT::v16i16, 3 }, in getTypeBasedIntrinsicInstrCost()
3054 { ISD::CTPOP, MVT::v16i8, 2 }, in getTypeBasedIntrinsicInstrCost()
3055 { ISD::CTPOP, MVT::v32i8, 2 }, in getTypeBasedIntrinsicInstrCost()
3056 { ISD::CTTZ, MVT::v2i64, 4 }, in getTypeBasedIntrinsicInstrCost()
3057 { ISD::CTTZ, MVT::v4i64, 4 }, in getTypeBasedIntrinsicInstrCost()
3058 { ISD::CTTZ, MVT::v4i32, 7 }, in getTypeBasedIntrinsicInstrCost()
3059 { ISD::CTTZ, MVT::v8i32, 7 }, in getTypeBasedIntrinsicInstrCost()
3060 { ISD::CTTZ, MVT::v8i16, 4 }, in getTypeBasedIntrinsicInstrCost()
3061 { ISD::CTTZ, MVT::v16i16, 4 }, in getTypeBasedIntrinsicInstrCost()
3062 { ISD::CTTZ, MVT::v16i8, 3 }, in getTypeBasedIntrinsicInstrCost()
3063 { ISD::CTTZ, MVT::v32i8, 3 }, in getTypeBasedIntrinsicInstrCost()
3064 { ISD::SADDSAT, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3065 { ISD::SADDSAT, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3066 { ISD::SMAX, MVT::v8i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3067 { ISD::SMAX, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3068 { ISD::SMAX, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3069 { ISD::SMIN, MVT::v8i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3070 { ISD::SMIN, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3071 { ISD::SMIN, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3072 { ISD::SSUBSAT, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3073 { ISD::SSUBSAT, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3074 { ISD::UADDSAT, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3075 { ISD::UADDSAT, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3076 { ISD::UADDSAT, MVT::v8i32, 3 }, // not + pminud + paddd in getTypeBasedIntrinsicInstrCost()
3077 { ISD::UMAX, MVT::v8i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3078 { ISD::UMAX, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3079 { ISD::UMAX, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3080 { ISD::UMIN, MVT::v8i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3081 { ISD::UMIN, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3082 { ISD::UMIN, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3083 { ISD::USUBSAT, MVT::v16i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3084 { ISD::USUBSAT, MVT::v32i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3085 { ISD::USUBSAT, MVT::v8i32, 2 }, // pmaxud + psubd in getTypeBasedIntrinsicInstrCost()
3086 { ISD::FMAXNUM, MVT::v8f32, 3 }, // MAXPS + CMPUNORDPS + BLENDVPS in getTypeBasedIntrinsicInstrCost()
3087 { ISD::FMAXNUM, MVT::v4f64, 3 }, // MAXPD + CMPUNORDPD + BLENDVPD in getTypeBasedIntrinsicInstrCost()
3088 { ISD::FSQRT, MVT::f32, 7 }, // Haswell from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3089 { ISD::FSQRT, MVT::v4f32, 7 }, // Haswell from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3090 { ISD::FSQRT, MVT::v8f32, 14 }, // Haswell from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3091 { ISD::FSQRT, MVT::f64, 14 }, // Haswell from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3092 { ISD::FSQRT, MVT::v2f64, 14 }, // Haswell from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3093 { ISD::FSQRT, MVT::v4f64, 28 }, // Haswell from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3096 { ISD::ABS, MVT::v4i64, 5 }, // VBLENDVPD(X,VPSUBQ(0,X),X) in getTypeBasedIntrinsicInstrCost()
3097 { ISD::ABS, MVT::v8i32, 3 }, in getTypeBasedIntrinsicInstrCost()
3098 { ISD::ABS, MVT::v16i16, 3 }, in getTypeBasedIntrinsicInstrCost()
3099 { ISD::ABS, MVT::v32i8, 3 }, in getTypeBasedIntrinsicInstrCost()
3100 { ISD::BITREVERSE, MVT::v4i64, 12 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3101 { ISD::BITREVERSE, MVT::v8i32, 12 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3102 { ISD::BITREVERSE, MVT::v16i16, 12 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3103 { ISD::BITREVERSE, MVT::v32i8, 12 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3104 { ISD::BSWAP, MVT::v4i64, 4 }, in getTypeBasedIntrinsicInstrCost()
3105 { ISD::BSWAP, MVT::v8i32, 4 }, in getTypeBasedIntrinsicInstrCost()
3106 { ISD::BSWAP, MVT::v16i16, 4 }, in getTypeBasedIntrinsicInstrCost()
3107 { ISD::CTLZ, MVT::v4i64, 48 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3108 { ISD::CTLZ, MVT::v8i32, 38 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3109 { ISD::CTLZ, MVT::v16i16, 30 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3110 { ISD::CTLZ, MVT::v32i8, 20 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3111 { ISD::CTPOP, MVT::v4i64, 16 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3112 { ISD::CTPOP, MVT::v8i32, 24 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3113 { ISD::CTPOP, MVT::v16i16, 20 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3114 { ISD::CTPOP, MVT::v32i8, 14 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3115 { ISD::CTTZ, MVT::v4i64, 22 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3116 { ISD::CTTZ, MVT::v8i32, 30 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3117 { ISD::CTTZ, MVT::v16i16, 26 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3118 { ISD::CTTZ, MVT::v32i8, 20 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3119 { ISD::SADDSAT, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3120 { ISD::SADDSAT, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3121 { ISD::SMAX, MVT::v8i32, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3122 { ISD::SMAX, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3123 { ISD::SMAX, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3124 { ISD::SMIN, MVT::v8i32, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3125 { ISD::SMIN, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3126 { ISD::SMIN, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3127 { ISD::SSUBSAT, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3128 { ISD::SSUBSAT, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3129 { ISD::UADDSAT, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3130 { ISD::UADDSAT, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3131 { ISD::UADDSAT, MVT::v8i32, 8 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3132 { ISD::UMAX, MVT::v8i32, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3133 { ISD::UMAX, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3134 { ISD::UMAX, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3135 { ISD::UMIN, MVT::v8i32, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3136 { ISD::UMIN, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3137 { ISD::UMIN, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3138 { ISD::USUBSAT, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3139 { ISD::USUBSAT, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3140 { ISD::USUBSAT, MVT::v8i32, 6 }, // 2 x 128-bit Op + extract/insert in getTypeBasedIntrinsicInstrCost()
3141 { ISD::FMAXNUM, MVT::f32, 3 }, // MAXSS + CMPUNORDSS + BLENDVPS in getTypeBasedIntrinsicInstrCost()
3142 { ISD::FMAXNUM, MVT::v4f32, 3 }, // MAXPS + CMPUNORDPS + BLENDVPS in getTypeBasedIntrinsicInstrCost()
3143 { ISD::FMAXNUM, MVT::v8f32, 5 }, // MAXPS + CMPUNORDPS + BLENDVPS + ? in getTypeBasedIntrinsicInstrCost()
3144 { ISD::FMAXNUM, MVT::f64, 3 }, // MAXSD + CMPUNORDSD + BLENDVPD in getTypeBasedIntrinsicInstrCost()
3145 { ISD::FMAXNUM, MVT::v2f64, 3 }, // MAXPD + CMPUNORDPD + BLENDVPD in getTypeBasedIntrinsicInstrCost()
3146 { ISD::FMAXNUM, MVT::v4f64, 5 }, // MAXPD + CMPUNORDPD + BLENDVPD + ? in getTypeBasedIntrinsicInstrCost()
3147 { ISD::FSQRT, MVT::f32, 14 }, // SNB from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3148 { ISD::FSQRT, MVT::v4f32, 14 }, // SNB from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3149 { ISD::FSQRT, MVT::v8f32, 28 }, // SNB from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3150 { ISD::FSQRT, MVT::f64, 21 }, // SNB from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3151 { ISD::FSQRT, MVT::v2f64, 21 }, // SNB from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3152 { ISD::FSQRT, MVT::v4f64, 43 }, // SNB from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3155 { ISD::FSQRT, MVT::f32, 19 }, // sqrtss in getTypeBasedIntrinsicInstrCost()
3156 { ISD::FSQRT, MVT::v4f32, 37 }, // sqrtps in getTypeBasedIntrinsicInstrCost()
3157 { ISD::FSQRT, MVT::f64, 34 }, // sqrtsd in getTypeBasedIntrinsicInstrCost()
3158 { ISD::FSQRT, MVT::v2f64, 67 }, // sqrtpd in getTypeBasedIntrinsicInstrCost()
3161 { ISD::FSQRT, MVT::f32, 20 }, // sqrtss in getTypeBasedIntrinsicInstrCost()
3162 { ISD::FSQRT, MVT::v4f32, 40 }, // sqrtps in getTypeBasedIntrinsicInstrCost()
3163 { ISD::FSQRT, MVT::f64, 35 }, // sqrtsd in getTypeBasedIntrinsicInstrCost()
3164 { ISD::FSQRT, MVT::v2f64, 70 }, // sqrtpd in getTypeBasedIntrinsicInstrCost()
3167 { ISD::USUBSAT, MVT::v4i32, 2 }, // pmaxud + psubd in getTypeBasedIntrinsicInstrCost()
3168 { ISD::UADDSAT, MVT::v4i32, 3 }, // not + pminud + paddd in getTypeBasedIntrinsicInstrCost()
3169 { ISD::FSQRT, MVT::f32, 18 }, // Nehalem from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3170 { ISD::FSQRT, MVT::v4f32, 18 }, // Nehalem from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3173 { ISD::ABS, MVT::v2i64, 2 }, // BLENDVPD(X,PSUBQ(0,X),X) in getTypeBasedIntrinsicInstrCost()
3174 { ISD::SMAX, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3175 { ISD::SMAX, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3176 { ISD::SMIN, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3177 { ISD::SMIN, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3178 { ISD::UMAX, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3179 { ISD::UMAX, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3180 { ISD::UMIN, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3181 { ISD::UMIN, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3184 { ISD::ABS, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3185 { ISD::ABS, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3186 { ISD::ABS, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3187 { ISD::BITREVERSE, MVT::v2i64, 5 }, in getTypeBasedIntrinsicInstrCost()
3188 { ISD::BITREVERSE, MVT::v4i32, 5 }, in getTypeBasedIntrinsicInstrCost()
3189 { ISD::BITREVERSE, MVT::v8i16, 5 }, in getTypeBasedIntrinsicInstrCost()
3190 { ISD::BITREVERSE, MVT::v16i8, 5 }, in getTypeBasedIntrinsicInstrCost()
3191 { ISD::BSWAP, MVT::v2i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3192 { ISD::BSWAP, MVT::v4i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3193 { ISD::BSWAP, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3194 { ISD::CTLZ, MVT::v2i64, 23 }, in getTypeBasedIntrinsicInstrCost()
3195 { ISD::CTLZ, MVT::v4i32, 18 }, in getTypeBasedIntrinsicInstrCost()
3196 { ISD::CTLZ, MVT::v8i16, 14 }, in getTypeBasedIntrinsicInstrCost()
3197 { ISD::CTLZ, MVT::v16i8, 9 }, in getTypeBasedIntrinsicInstrCost()
3198 { ISD::CTPOP, MVT::v2i64, 7 }, in getTypeBasedIntrinsicInstrCost()
3199 { ISD::CTPOP, MVT::v4i32, 11 }, in getTypeBasedIntrinsicInstrCost()
3200 { ISD::CTPOP, MVT::v8i16, 9 }, in getTypeBasedIntrinsicInstrCost()
3201 { ISD::CTPOP, MVT::v16i8, 6 }, in getTypeBasedIntrinsicInstrCost()
3202 { ISD::CTTZ, MVT::v2i64, 10 }, in getTypeBasedIntrinsicInstrCost()
3203 { ISD::CTTZ, MVT::v4i32, 14 }, in getTypeBasedIntrinsicInstrCost()
3204 { ISD::CTTZ, MVT::v8i16, 12 }, in getTypeBasedIntrinsicInstrCost()
3205 { ISD::CTTZ, MVT::v16i8, 9 } in getTypeBasedIntrinsicInstrCost()
3208 { ISD::ABS, MVT::v2i64, 4 }, in getTypeBasedIntrinsicInstrCost()
3209 { ISD::ABS, MVT::v4i32, 3 }, in getTypeBasedIntrinsicInstrCost()
3210 { ISD::ABS, MVT::v8i16, 2 }, in getTypeBasedIntrinsicInstrCost()
3211 { ISD::ABS, MVT::v16i8, 2 }, in getTypeBasedIntrinsicInstrCost()
3212 { ISD::BITREVERSE, MVT::v2i64, 29 }, in getTypeBasedIntrinsicInstrCost()
3213 { ISD::BITREVERSE, MVT::v4i32, 27 }, in getTypeBasedIntrinsicInstrCost()
3214 { ISD::BITREVERSE, MVT::v8i16, 27 }, in getTypeBasedIntrinsicInstrCost()
3215 { ISD::BITREVERSE, MVT::v16i8, 20 }, in getTypeBasedIntrinsicInstrCost()
3216 { ISD::BSWAP, MVT::v2i64, 7 }, in getTypeBasedIntrinsicInstrCost()
3217 { ISD::BSWAP, MVT::v4i32, 7 }, in getTypeBasedIntrinsicInstrCost()
3218 { ISD::BSWAP, MVT::v8i16, 7 }, in getTypeBasedIntrinsicInstrCost()
3219 { ISD::CTLZ, MVT::v2i64, 25 }, in getTypeBasedIntrinsicInstrCost()
3220 { ISD::CTLZ, MVT::v4i32, 26 }, in getTypeBasedIntrinsicInstrCost()
3221 { ISD::CTLZ, MVT::v8i16, 20 }, in getTypeBasedIntrinsicInstrCost()
3222 { ISD::CTLZ, MVT::v16i8, 17 }, in getTypeBasedIntrinsicInstrCost()
3223 { ISD::CTPOP, MVT::v2i64, 12 }, in getTypeBasedIntrinsicInstrCost()
3224 { ISD::CTPOP, MVT::v4i32, 15 }, in getTypeBasedIntrinsicInstrCost()
3225 { ISD::CTPOP, MVT::v8i16, 13 }, in getTypeBasedIntrinsicInstrCost()
3226 { ISD::CTPOP, MVT::v16i8, 10 }, in getTypeBasedIntrinsicInstrCost()
3227 { ISD::CTTZ, MVT::v2i64, 14 }, in getTypeBasedIntrinsicInstrCost()
3228 { ISD::CTTZ, MVT::v4i32, 18 }, in getTypeBasedIntrinsicInstrCost()
3229 { ISD::CTTZ, MVT::v8i16, 16 }, in getTypeBasedIntrinsicInstrCost()
3230 { ISD::CTTZ, MVT::v16i8, 13 }, in getTypeBasedIntrinsicInstrCost()
3231 { ISD::SADDSAT, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3232 { ISD::SADDSAT, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3233 { ISD::SMAX, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3234 { ISD::SMIN, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3235 { ISD::SSUBSAT, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3236 { ISD::SSUBSAT, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3237 { ISD::UADDSAT, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3238 { ISD::UADDSAT, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3239 { ISD::UMAX, MVT::v8i16, 2 }, in getTypeBasedIntrinsicInstrCost()
3240 { ISD::UMAX, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3241 { ISD::UMIN, MVT::v8i16, 2 }, in getTypeBasedIntrinsicInstrCost()
3242 { ISD::UMIN, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3243 { ISD::USUBSAT, MVT::v8i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3244 { ISD::USUBSAT, MVT::v16i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3245 { ISD::FMAXNUM, MVT::f64, 4 }, in getTypeBasedIntrinsicInstrCost()
3246 { ISD::FMAXNUM, MVT::v2f64, 4 }, in getTypeBasedIntrinsicInstrCost()
3247 { ISD::FSQRT, MVT::f64, 32 }, // Nehalem from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3248 { ISD::FSQRT, MVT::v2f64, 32 }, // Nehalem from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3251 { ISD::FMAXNUM, MVT::f32, 4 }, in getTypeBasedIntrinsicInstrCost()
3252 { ISD::FMAXNUM, MVT::v4f32, 4 }, in getTypeBasedIntrinsicInstrCost()
3253 { ISD::FSQRT, MVT::f32, 28 }, // Pentium III from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3254 { ISD::FSQRT, MVT::v4f32, 56 }, // Pentium III from http://www.agner.org/ in getTypeBasedIntrinsicInstrCost()
3257 { ISD::CTTZ, MVT::i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3260 { ISD::CTTZ, MVT::i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3261 { ISD::CTTZ, MVT::i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3262 { ISD::CTTZ, MVT::i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3265 { ISD::CTLZ, MVT::i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3268 { ISD::CTLZ, MVT::i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3269 { ISD::CTLZ, MVT::i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3270 { ISD::CTLZ, MVT::i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3273 { ISD::CTPOP, MVT::i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3276 { ISD::CTPOP, MVT::i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3277 { ISD::CTPOP, MVT::i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3278 { ISD::CTPOP, MVT::i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3281 { ISD::ABS, MVT::i64, 2 }, // SUB+CMOV in getTypeBasedIntrinsicInstrCost()
3282 { ISD::BITREVERSE, MVT::i64, 14 }, in getTypeBasedIntrinsicInstrCost()
3283 { ISD::BSWAP, MVT::i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3284 { ISD::CTLZ, MVT::i64, 4 }, // BSR+XOR or BSR+XOR+CMOV in getTypeBasedIntrinsicInstrCost()
3285 { ISD::CTTZ, MVT::i64, 3 }, // TEST+BSF+CMOV/BRANCH in getTypeBasedIntrinsicInstrCost()
3286 { ISD::CTPOP, MVT::i64, 10 }, in getTypeBasedIntrinsicInstrCost()
3287 { ISD::SADDO, MVT::i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3288 { ISD::UADDO, MVT::i64, 1 }, in getTypeBasedIntrinsicInstrCost()
3289 { ISD::UMULO, MVT::i64, 2 }, // mulq + seto in getTypeBasedIntrinsicInstrCost()
3292 { ISD::ABS, MVT::i32, 2 }, // SUB+CMOV in getTypeBasedIntrinsicInstrCost()
3293 { ISD::ABS, MVT::i16, 2 }, // SUB+CMOV in getTypeBasedIntrinsicInstrCost()
3294 { ISD::BITREVERSE, MVT::i32, 14 }, in getTypeBasedIntrinsicInstrCost()
3295 { ISD::BITREVERSE, MVT::i16, 14 }, in getTypeBasedIntrinsicInstrCost()
3296 { ISD::BITREVERSE, MVT::i8, 11 }, in getTypeBasedIntrinsicInstrCost()
3297 { ISD::BSWAP, MVT::i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3298 { ISD::BSWAP, MVT::i16, 1 }, // ROL in getTypeBasedIntrinsicInstrCost()
3299 { ISD::CTLZ, MVT::i32, 4 }, // BSR+XOR or BSR+XOR+CMOV in getTypeBasedIntrinsicInstrCost()
3300 { ISD::CTLZ, MVT::i16, 4 }, // BSR+XOR or BSR+XOR+CMOV in getTypeBasedIntrinsicInstrCost()
3301 { ISD::CTLZ, MVT::i8, 4 }, // BSR+XOR or BSR+XOR+CMOV in getTypeBasedIntrinsicInstrCost()
3302 { ISD::CTTZ, MVT::i32, 3 }, // TEST+BSF+CMOV/BRANCH in getTypeBasedIntrinsicInstrCost()
3303 { ISD::CTTZ, MVT::i16, 3 }, // TEST+BSF+CMOV/BRANCH in getTypeBasedIntrinsicInstrCost()
3304 { ISD::CTTZ, MVT::i8, 3 }, // TEST+BSF+CMOV/BRANCH in getTypeBasedIntrinsicInstrCost()
3305 { ISD::CTPOP, MVT::i32, 8 }, in getTypeBasedIntrinsicInstrCost()
3306 { ISD::CTPOP, MVT::i16, 9 }, in getTypeBasedIntrinsicInstrCost()
3307 { ISD::CTPOP, MVT::i8, 7 }, in getTypeBasedIntrinsicInstrCost()
3308 { ISD::SADDO, MVT::i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3309 { ISD::SADDO, MVT::i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3310 { ISD::SADDO, MVT::i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3311 { ISD::UADDO, MVT::i32, 1 }, in getTypeBasedIntrinsicInstrCost()
3312 { ISD::UADDO, MVT::i16, 1 }, in getTypeBasedIntrinsicInstrCost()
3313 { ISD::UADDO, MVT::i8, 1 }, in getTypeBasedIntrinsicInstrCost()
3314 { ISD::UMULO, MVT::i32, 2 }, // mul + seto in getTypeBasedIntrinsicInstrCost()
3315 { ISD::UMULO, MVT::i16, 2 }, in getTypeBasedIntrinsicInstrCost()
3316 { ISD::UMULO, MVT::i8, 2 }, in getTypeBasedIntrinsicInstrCost()
3322 unsigned ISD = ISD::DELETED_NODE; in getTypeBasedIntrinsicInstrCost() local
3327 ISD = ISD::ABS; in getTypeBasedIntrinsicInstrCost()
3330 ISD = ISD::BITREVERSE; in getTypeBasedIntrinsicInstrCost()
3333 ISD = ISD::BSWAP; in getTypeBasedIntrinsicInstrCost()
3336 ISD = ISD::CTLZ; in getTypeBasedIntrinsicInstrCost()
3339 ISD = ISD::CTPOP; in getTypeBasedIntrinsicInstrCost()
3342 ISD = ISD::CTTZ; in getTypeBasedIntrinsicInstrCost()
3347 ISD = ISD::FMAXNUM; in getTypeBasedIntrinsicInstrCost()
3350 ISD = ISD::SADDSAT; in getTypeBasedIntrinsicInstrCost()
3353 ISD = ISD::SMAX; in getTypeBasedIntrinsicInstrCost()
3356 ISD = ISD::SMIN; in getTypeBasedIntrinsicInstrCost()
3359 ISD = ISD::SSUBSAT; in getTypeBasedIntrinsicInstrCost()
3362 ISD = ISD::UADDSAT; in getTypeBasedIntrinsicInstrCost()
3365 ISD = ISD::UMAX; in getTypeBasedIntrinsicInstrCost()
3368 ISD = ISD::UMIN; in getTypeBasedIntrinsicInstrCost()
3371 ISD = ISD::USUBSAT; in getTypeBasedIntrinsicInstrCost()
3374 ISD = ISD::FSQRT; in getTypeBasedIntrinsicInstrCost()
3379 ISD = ISD::SADDO; in getTypeBasedIntrinsicInstrCost()
3385 ISD = ISD::UADDO; in getTypeBasedIntrinsicInstrCost()
3391 ISD = ISD::UMULO; in getTypeBasedIntrinsicInstrCost()
3396 if (ISD != ISD::DELETED_NODE) { in getTypeBasedIntrinsicInstrCost()
3402 if (ISD == ISD::BITREVERSE && ST->hasGFNI() && ST->hasSSSE3() && in getTypeBasedIntrinsicInstrCost()
3424 if (Entry.ISD == ISD::FMAXNUM || Entry.ISD == ISD::FMINNUM) { in getTypeBasedIntrinsicInstrCost()
3432 if (const auto *Entry = CostTableLookup(GLMCostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3436 if (const auto *Entry = CostTableLookup(SLMCostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3440 if (const auto *Entry = CostTableLookup(AVX512BITALGCostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3444 if (const auto *Entry = CostTableLookup(AVX512VPOPCNTDQCostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3448 if (const auto *Entry = CostTableLookup(AVX512CDCostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3452 if (const auto *Entry = CostTableLookup(AVX512BWCostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3456 if (const auto *Entry = CostTableLookup(AVX512CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3460 if (const auto *Entry = CostTableLookup(XOPCostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3464 if (const auto *Entry = CostTableLookup(AVX2CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3468 if (const auto *Entry = CostTableLookup(AVX1CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3472 if (const auto *Entry = CostTableLookup(SSE42CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3476 if (const auto *Entry = CostTableLookup(SSE41CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3480 if (const auto *Entry = CostTableLookup(SSSE3CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3484 if (const auto *Entry = CostTableLookup(SSE2CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3488 if (const auto *Entry = CostTableLookup(SSE1CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3493 if (const auto *Entry = CostTableLookup(BMI64CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3496 if (const auto *Entry = CostTableLookup(BMI32CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3502 if (const auto *Entry = CostTableLookup(LZCNT64CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3505 if (const auto *Entry = CostTableLookup(LZCNT32CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3511 if (const auto *Entry = CostTableLookup(POPCNT64CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3514 if (const auto *Entry = CostTableLookup(POPCNT32CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3518 if (ISD == ISD::BSWAP && ST->hasMOVBE() && ST->hasFastMOVBE()) { in getTypeBasedIntrinsicInstrCost()
3530 if (const auto *Entry = CostTableLookup(X64CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3533 if (const auto *Entry = CostTableLookup(X86CostTbl, ISD, MTy)) in getTypeBasedIntrinsicInstrCost()
3547 { ISD::ROTL, MVT::v32i16, 2 }, in getIntrinsicInstrCost()
3548 { ISD::ROTL, MVT::v16i16, 2 }, in getIntrinsicInstrCost()
3549 { ISD::ROTL, MVT::v8i16, 2 }, in getIntrinsicInstrCost()
3550 { ISD::ROTL, MVT::v64i8, 5 }, in getIntrinsicInstrCost()
3551 { ISD::ROTL, MVT::v32i8, 5 }, in getIntrinsicInstrCost()
3552 { ISD::ROTL, MVT::v16i8, 5 }, in getIntrinsicInstrCost()
3553 { ISD::ROTR, MVT::v32i16, 2 }, in getIntrinsicInstrCost()
3554 { ISD::ROTR, MVT::v16i16, 2 }, in getIntrinsicInstrCost()
3555 { ISD::ROTR, MVT::v8i16, 2 }, in getIntrinsicInstrCost()
3556 { ISD::ROTR, MVT::v64i8, 5 }, in getIntrinsicInstrCost()
3557 { ISD::ROTR, MVT::v32i8, 5 }, in getIntrinsicInstrCost()
3558 { ISD::ROTR, MVT::v16i8, 5 } in getIntrinsicInstrCost()
3561 { ISD::ROTL, MVT::v8i64, 1 }, in getIntrinsicInstrCost()
3562 { ISD::ROTL, MVT::v4i64, 1 }, in getIntrinsicInstrCost()
3563 { ISD::ROTL, MVT::v2i64, 1 }, in getIntrinsicInstrCost()
3564 { ISD::ROTL, MVT::v16i32, 1 }, in getIntrinsicInstrCost()
3565 { ISD::ROTL, MVT::v8i32, 1 }, in getIntrinsicInstrCost()
3566 { ISD::ROTL, MVT::v4i32, 1 }, in getIntrinsicInstrCost()
3567 { ISD::ROTR, MVT::v8i64, 1 }, in getIntrinsicInstrCost()
3568 { ISD::ROTR, MVT::v4i64, 1 }, in getIntrinsicInstrCost()
3569 { ISD::ROTR, MVT::v2i64, 1 }, in getIntrinsicInstrCost()
3570 { ISD::ROTR, MVT::v16i32, 1 }, in getIntrinsicInstrCost()
3571 { ISD::ROTR, MVT::v8i32, 1 }, in getIntrinsicInstrCost()
3572 { ISD::ROTR, MVT::v4i32, 1 } in getIntrinsicInstrCost()
3576 { ISD::ROTL, MVT::v4i64, 4 }, in getIntrinsicInstrCost()
3577 { ISD::ROTL, MVT::v8i32, 4 }, in getIntrinsicInstrCost()
3578 { ISD::ROTL, MVT::v16i16, 4 }, in getIntrinsicInstrCost()
3579 { ISD::ROTL, MVT::v32i8, 4 }, in getIntrinsicInstrCost()
3580 { ISD::ROTL, MVT::v2i64, 1 }, in getIntrinsicInstrCost()
3581 { ISD::ROTL, MVT::v4i32, 1 }, in getIntrinsicInstrCost()
3582 { ISD::ROTL, MVT::v8i16, 1 }, in getIntrinsicInstrCost()
3583 { ISD::ROTL, MVT::v16i8, 1 }, in getIntrinsicInstrCost()
3584 { ISD::ROTR, MVT::v4i64, 6 }, in getIntrinsicInstrCost()
3585 { ISD::ROTR, MVT::v8i32, 6 }, in getIntrinsicInstrCost()
3586 { ISD::ROTR, MVT::v16i16, 6 }, in getIntrinsicInstrCost()
3587 { ISD::ROTR, MVT::v32i8, 6 }, in getIntrinsicInstrCost()
3588 { ISD::ROTR, MVT::v2i64, 2 }, in getIntrinsicInstrCost()
3589 { ISD::ROTR, MVT::v4i32, 2 }, in getIntrinsicInstrCost()
3590 { ISD::ROTR, MVT::v8i16, 2 }, in getIntrinsicInstrCost()
3591 { ISD::ROTR, MVT::v16i8, 2 } in getIntrinsicInstrCost()
3594 { ISD::ROTL, MVT::i64, 1 }, in getIntrinsicInstrCost()
3595 { ISD::ROTR, MVT::i64, 1 }, in getIntrinsicInstrCost()
3596 { ISD::FSHL, MVT::i64, 4 } in getIntrinsicInstrCost()
3599 { ISD::ROTL, MVT::i32, 1 }, in getIntrinsicInstrCost()
3600 { ISD::ROTL, MVT::i16, 1 }, in getIntrinsicInstrCost()
3601 { ISD::ROTL, MVT::i8, 1 }, in getIntrinsicInstrCost()
3602 { ISD::ROTR, MVT::i32, 1 }, in getIntrinsicInstrCost()
3603 { ISD::ROTR, MVT::i16, 1 }, in getIntrinsicInstrCost()
3604 { ISD::ROTR, MVT::i8, 1 }, in getIntrinsicInstrCost()
3605 { ISD::FSHL, MVT::i32, 4 }, in getIntrinsicInstrCost()
3606 { ISD::FSHL, MVT::i16, 4 }, in getIntrinsicInstrCost()
3607 { ISD::FSHL, MVT::i8, 4 } in getIntrinsicInstrCost()
3613 unsigned ISD = ISD::DELETED_NODE; in getIntrinsicInstrCost() local
3618 ISD = ISD::FSHL; in getIntrinsicInstrCost()
3620 ISD = ISD::ROTL; in getIntrinsicInstrCost()
3624 ISD = ISD::FSHL; in getIntrinsicInstrCost()
3626 ISD = ISD::ROTR; in getIntrinsicInstrCost()
3630 if (ISD != ISD::DELETED_NODE) { in getIntrinsicInstrCost()
3638 if (const auto *Entry = CostTableLookup(AVX512BWCostTbl, ISD, MTy)) in getIntrinsicInstrCost()
3642 if (const auto *Entry = CostTableLookup(AVX512CostTbl, ISD, MTy)) in getIntrinsicInstrCost()
3646 if (const auto *Entry = CostTableLookup(XOPCostTbl, ISD, MTy)) in getIntrinsicInstrCost()
3650 if (const auto *Entry = CostTableLookup(X64CostTbl, ISD, MTy)) in getIntrinsicInstrCost()
3653 if (const auto *Entry = CostTableLookup(X86CostTbl, ISD, MTy)) in getIntrinsicInstrCost()
3663 { ISD::EXTRACT_VECTOR_ELT, MVT::i8, 4 }, in getVectorInstrCost()
3664 { ISD::EXTRACT_VECTOR_ELT, MVT::i16, 4 }, in getVectorInstrCost()
3665 { ISD::EXTRACT_VECTOR_ELT, MVT::i32, 4 }, in getVectorInstrCost()
3666 { ISD::EXTRACT_VECTOR_ELT, MVT::i64, 7 } in getVectorInstrCost()
3748 int ISD = TLI->InstructionOpcodeToISD(Opcode); in getVectorInstrCost() local
3749 assert(ISD && "Unexpected vector opcode"); in getVectorInstrCost()
3752 if (auto *Entry = CostTableLookup(SLMCostTbl, ISD, MScalarTy)) in getVectorInstrCost()
4293 { ISD::FADD, MVT::v2f64, 3 }, in getArithmeticReductionCost()
4294 { ISD::ADD, MVT::v2i64, 5 }, in getArithmeticReductionCost()
4298 { ISD::FADD, MVT::v2f64, 2 }, in getArithmeticReductionCost()
4299 { ISD::FADD, MVT::v2f32, 2 }, in getArithmeticReductionCost()
4300 { ISD::FADD, MVT::v4f32, 4 }, in getArithmeticReductionCost()
4301 { ISD::ADD, MVT::v2i64, 2 }, // The data reported by the IACA tool is "1.6". in getArithmeticReductionCost()
4302 { ISD::ADD, MVT::v2i32, 2 }, // FIXME: chosen to be less than v4i32 in getArithmeticReductionCost()
4303 { ISD::ADD, MVT::v4i32, 3 }, // The data reported by the IACA tool is "3.3". in getArithmeticReductionCost()
4304 { ISD::ADD, MVT::v2i16, 2 }, // The data reported by the IACA tool is "4.3". in getArithmeticReductionCost()
4305 { ISD::ADD, MVT::v4i16, 3 }, // The data reported by the IACA tool is "4.3". in getArithmeticReductionCost()
4306 { ISD::ADD, MVT::v8i16, 4 }, // The data reported by the IACA tool is "4.3". in getArithmeticReductionCost()
4307 { ISD::ADD, MVT::v2i8, 2 }, in getArithmeticReductionCost()
4308 { ISD::ADD, MVT::v4i8, 2 }, in getArithmeticReductionCost()
4309 { ISD::ADD, MVT::v8i8, 2 }, in getArithmeticReductionCost()
4310 { ISD::ADD, MVT::v16i8, 3 }, in getArithmeticReductionCost()
4314 { ISD::FADD, MVT::v4f64, 3 }, in getArithmeticReductionCost()
4315 { ISD::FADD, MVT::v4f32, 3 }, in getArithmeticReductionCost()
4316 { ISD::FADD, MVT::v8f32, 4 }, in getArithmeticReductionCost()
4317 { ISD::ADD, MVT::v2i64, 1 }, // The data reported by the IACA tool is "1.5". in getArithmeticReductionCost()
4318 { ISD::ADD, MVT::v4i64, 3 }, in getArithmeticReductionCost()
4319 { ISD::ADD, MVT::v8i32, 5 }, in getArithmeticReductionCost()
4320 { ISD::ADD, MVT::v16i16, 5 }, in getArithmeticReductionCost()
4321 { ISD::ADD, MVT::v32i8, 4 }, in getArithmeticReductionCost()
4324 int ISD = TLI->InstructionOpcodeToISD(Opcode); in getArithmeticReductionCost() local
4325 assert(ISD && "Invalid opcode"); in getArithmeticReductionCost()
4334 if (const auto *Entry = CostTableLookup(SLMCostTblNoPairWise, ISD, MTy)) in getArithmeticReductionCost()
4338 if (const auto *Entry = CostTableLookup(AVX1CostTblNoPairWise, ISD, MTy)) in getArithmeticReductionCost()
4342 if (const auto *Entry = CostTableLookup(SSE2CostTblNoPairWise, ISD, MTy)) in getArithmeticReductionCost()
4353 if (ISD == ISD::MUL && MTy.getScalarType() == MVT::i8) { in getArithmeticReductionCost()
4373 if (const auto *Entry = CostTableLookup(SLMCostTblNoPairWise, ISD, MTy)) in getArithmeticReductionCost()
4377 if (const auto *Entry = CostTableLookup(AVX1CostTblNoPairWise, ISD, MTy)) in getArithmeticReductionCost()
4381 if (const auto *Entry = CostTableLookup(SSE2CostTblNoPairWise, ISD, MTy)) in getArithmeticReductionCost()
4387 { ISD::AND, MVT::v2i1, 3 }, in getArithmeticReductionCost()
4388 { ISD::AND, MVT::v4i1, 5 }, in getArithmeticReductionCost()
4389 { ISD::AND, MVT::v8i1, 7 }, in getArithmeticReductionCost()
4390 { ISD::AND, MVT::v16i1, 9 }, in getArithmeticReductionCost()
4391 { ISD::AND, MVT::v32i1, 11 }, in getArithmeticReductionCost()
4392 { ISD::AND, MVT::v64i1, 13 }, in getArithmeticReductionCost()
4393 { ISD::OR, MVT::v2i1, 3 }, in getArithmeticReductionCost()
4394 { ISD::OR, MVT::v4i1, 5 }, in getArithmeticReductionCost()
4395 { ISD::OR, MVT::v8i1, 7 }, in getArithmeticReductionCost()
4396 { ISD::OR, MVT::v16i1, 9 }, in getArithmeticReductionCost()
4397 { ISD::OR, MVT::v32i1, 11 }, in getArithmeticReductionCost()
4398 { ISD::OR, MVT::v64i1, 13 }, in getArithmeticReductionCost()
4402 { ISD::AND, MVT::v16i16, 2 }, // vpmovmskb + cmp in getArithmeticReductionCost()
4403 { ISD::AND, MVT::v32i8, 2 }, // vpmovmskb + cmp in getArithmeticReductionCost()
4404 { ISD::OR, MVT::v16i16, 2 }, // vpmovmskb + cmp in getArithmeticReductionCost()
4405 { ISD::OR, MVT::v32i8, 2 }, // vpmovmskb + cmp in getArithmeticReductionCost()
4409 { ISD::AND, MVT::v4i64, 2 }, // vmovmskpd + cmp in getArithmeticReductionCost()
4410 { ISD::AND, MVT::v8i32, 2 }, // vmovmskps + cmp in getArithmeticReductionCost()
4411 { ISD::AND, MVT::v16i16, 4 }, // vextractf128 + vpand + vpmovmskb + cmp in getArithmeticReductionCost()
4412 { ISD::AND, MVT::v32i8, 4 }, // vextractf128 + vpand + vpmovmskb + cmp in getArithmeticReductionCost()
4413 { ISD::OR, MVT::v4i64, 2 }, // vmovmskpd + cmp in getArithmeticReductionCost()
4414 { ISD::OR, MVT::v8i32, 2 }, // vmovmskps + cmp in getArithmeticReductionCost()
4415 { ISD::OR, MVT::v16i16, 4 }, // vextractf128 + vpor + vpmovmskb + cmp in getArithmeticReductionCost()
4416 { ISD::OR, MVT::v32i8, 4 }, // vextractf128 + vpor + vpmovmskb + cmp in getArithmeticReductionCost()
4420 { ISD::AND, MVT::v2i64, 2 }, // movmskpd + cmp in getArithmeticReductionCost()
4421 { ISD::AND, MVT::v4i32, 2 }, // movmskps + cmp in getArithmeticReductionCost()
4422 { ISD::AND, MVT::v8i16, 2 }, // pmovmskb + cmp in getArithmeticReductionCost()
4423 { ISD::AND, MVT::v16i8, 2 }, // pmovmskb + cmp in getArithmeticReductionCost()
4424 { ISD::OR, MVT::v2i64, 2 }, // movmskpd + cmp in getArithmeticReductionCost()
4425 { ISD::OR, MVT::v4i32, 2 }, // movmskps + cmp in getArithmeticReductionCost()
4426 { ISD::OR, MVT::v8i16, 2 }, // pmovmskb + cmp in getArithmeticReductionCost()
4427 { ISD::OR, MVT::v16i8, 2 }, // pmovmskb + cmp in getArithmeticReductionCost()
4443 if (const auto *Entry = CostTableLookup(AVX512BoolReduction, ISD, MTy)) in getArithmeticReductionCost()
4446 if (const auto *Entry = CostTableLookup(AVX2BoolReduction, ISD, MTy)) in getArithmeticReductionCost()
4449 if (const auto *Entry = CostTableLookup(AVX1BoolReduction, ISD, MTy)) in getArithmeticReductionCost()
4452 if (const auto *Entry = CostTableLookup(SSE2BoolReduction, ISD, MTy)) in getArithmeticReductionCost()
4538 int ISD; in getMinMaxCost() local
4540 ISD = IsUnsigned ? ISD::UMIN : ISD::SMIN; in getMinMaxCost()
4544 ISD = ISD::FMINNUM; in getMinMaxCost()
4548 {ISD::FMINNUM, MVT::v4f32, 1}, in getMinMaxCost()
4552 {ISD::FMINNUM, MVT::v2f64, 1}, in getMinMaxCost()
4553 {ISD::SMIN, MVT::v8i16, 1}, in getMinMaxCost()
4554 {ISD::UMIN, MVT::v16i8, 1}, in getMinMaxCost()
4558 {ISD::SMIN, MVT::v4i32, 1}, in getMinMaxCost()
4559 {ISD::UMIN, MVT::v4i32, 1}, in getMinMaxCost()
4560 {ISD::UMIN, MVT::v8i16, 1}, in getMinMaxCost()
4561 {ISD::SMIN, MVT::v16i8, 1}, in getMinMaxCost()
4565 {ISD::UMIN, MVT::v2i64, 3}, // xor+pcmpgtq+blendvpd in getMinMaxCost()
4569 {ISD::FMINNUM, MVT::v8f32, 1}, in getMinMaxCost()
4570 {ISD::FMINNUM, MVT::v4f64, 1}, in getMinMaxCost()
4571 {ISD::SMIN, MVT::v8i32, 3}, in getMinMaxCost()
4572 {ISD::UMIN, MVT::v8i32, 3}, in getMinMaxCost()
4573 {ISD::SMIN, MVT::v16i16, 3}, in getMinMaxCost()
4574 {ISD::UMIN, MVT::v16i16, 3}, in getMinMaxCost()
4575 {ISD::SMIN, MVT::v32i8, 3}, in getMinMaxCost()
4576 {ISD::UMIN, MVT::v32i8, 3}, in getMinMaxCost()
4580 {ISD::SMIN, MVT::v8i32, 1}, in getMinMaxCost()
4581 {ISD::UMIN, MVT::v8i32, 1}, in getMinMaxCost()
4582 {ISD::SMIN, MVT::v16i16, 1}, in getMinMaxCost()
4583 {ISD::UMIN, MVT::v16i16, 1}, in getMinMaxCost()
4584 {ISD::SMIN, MVT::v32i8, 1}, in getMinMaxCost()
4585 {ISD::UMIN, MVT::v32i8, 1}, in getMinMaxCost()
4589 {ISD::FMINNUM, MVT::v16f32, 1}, in getMinMaxCost()
4590 {ISD::FMINNUM, MVT::v8f64, 1}, in getMinMaxCost()
4591 {ISD::SMIN, MVT::v2i64, 1}, in getMinMaxCost()
4592 {ISD::UMIN, MVT::v2i64, 1}, in getMinMaxCost()
4593 {ISD::SMIN, MVT::v4i64, 1}, in getMinMaxCost()
4594 {ISD::UMIN, MVT::v4i64, 1}, in getMinMaxCost()
4595 {ISD::SMIN, MVT::v8i64, 1}, in getMinMaxCost()
4596 {ISD::UMIN, MVT::v8i64, 1}, in getMinMaxCost()
4597 {ISD::SMIN, MVT::v16i32, 1}, in getMinMaxCost()
4598 {ISD::UMIN, MVT::v16i32, 1}, in getMinMaxCost()
4602 {ISD::SMIN, MVT::v32i16, 1}, in getMinMaxCost()
4603 {ISD::UMIN, MVT::v32i16, 1}, in getMinMaxCost()
4604 {ISD::SMIN, MVT::v64i8, 1}, in getMinMaxCost()
4605 {ISD::UMIN, MVT::v64i8, 1}, in getMinMaxCost()
4610 if (const auto *Entry = CostTableLookup(AVX512BWCostTbl, ISD, MTy)) in getMinMaxCost()
4614 if (const auto *Entry = CostTableLookup(AVX512CostTbl, ISD, MTy)) in getMinMaxCost()
4618 if (const auto *Entry = CostTableLookup(AVX2CostTbl, ISD, MTy)) in getMinMaxCost()
4622 if (const auto *Entry = CostTableLookup(AVX1CostTbl, ISD, MTy)) in getMinMaxCost()
4626 if (const auto *Entry = CostTableLookup(SSE42CostTbl, ISD, MTy)) in getMinMaxCost()
4630 if (const auto *Entry = CostTableLookup(SSE41CostTbl, ISD, MTy)) in getMinMaxCost()
4634 if (const auto *Entry = CostTableLookup(SSE2CostTbl, ISD, MTy)) in getMinMaxCost()
4638 if (const auto *Entry = CostTableLookup(SSE1CostTbl, ISD, MTy)) in getMinMaxCost()
4668 int ISD; in getMinMaxReductionCost() local
4670 ISD = IsUnsigned ? ISD::UMIN : ISD::SMIN; in getMinMaxReductionCost()
4674 ISD = ISD::FMINNUM; in getMinMaxReductionCost()
4681 {ISD::UMIN, MVT::v2i16, 5}, // need pxors to use pminsw/pmaxsw in getMinMaxReductionCost()
4682 {ISD::UMIN, MVT::v4i16, 7}, // need pxors to use pminsw/pmaxsw in getMinMaxReductionCost()
4683 {ISD::UMIN, MVT::v8i16, 9}, // need pxors to use pminsw/pmaxsw in getMinMaxReductionCost()
4687 {ISD::SMIN, MVT::v2i16, 3}, // same as sse2 in getMinMaxReductionCost()
4688 {ISD::SMIN, MVT::v4i16, 5}, // same as sse2 in getMinMaxReductionCost()
4689 {ISD::UMIN, MVT::v2i16, 5}, // same as sse2 in getMinMaxReductionCost()
4690 {ISD::UMIN, MVT::v4i16, 7}, // same as sse2 in getMinMaxReductionCost()
4691 {ISD::SMIN, MVT::v8i16, 4}, // phminposuw+xor in getMinMaxReductionCost()
4692 {ISD::UMIN, MVT::v8i16, 4}, // FIXME: umin is cheaper than umax in getMinMaxReductionCost()
4693 {ISD::SMIN, MVT::v2i8, 3}, // pminsb in getMinMaxReductionCost()
4694 {ISD::SMIN, MVT::v4i8, 5}, // pminsb in getMinMaxReductionCost()
4695 {ISD::SMIN, MVT::v8i8, 7}, // pminsb in getMinMaxReductionCost()
4696 {ISD::SMIN, MVT::v16i8, 6}, in getMinMaxReductionCost()
4697 {ISD::UMIN, MVT::v2i8, 3}, // same as sse2 in getMinMaxReductionCost()
4698 {ISD::UMIN, MVT::v4i8, 5}, // same as sse2 in getMinMaxReductionCost()
4699 {ISD::UMIN, MVT::v8i8, 7}, // same as sse2 in getMinMaxReductionCost()
4700 {ISD::UMIN, MVT::v16i8, 6}, // FIXME: umin is cheaper than umax in getMinMaxReductionCost()
4704 {ISD::SMIN, MVT::v16i16, 6}, in getMinMaxReductionCost()
4705 {ISD::UMIN, MVT::v16i16, 6}, // FIXME: umin is cheaper than umax in getMinMaxReductionCost()
4706 {ISD::SMIN, MVT::v32i8, 8}, in getMinMaxReductionCost()
4707 {ISD::UMIN, MVT::v32i8, 8}, in getMinMaxReductionCost()
4711 {ISD::SMIN, MVT::v32i16, 8}, in getMinMaxReductionCost()
4712 {ISD::UMIN, MVT::v32i16, 8}, // FIXME: umin is cheaper than umax in getMinMaxReductionCost()
4713 {ISD::SMIN, MVT::v64i8, 10}, in getMinMaxReductionCost()
4714 {ISD::UMIN, MVT::v64i8, 10}, in getMinMaxReductionCost()
4724 if (const auto *Entry = CostTableLookup(AVX512BWCostTblNoPairWise, ISD, MTy)) in getMinMaxReductionCost()
4728 if (const auto *Entry = CostTableLookup(AVX1CostTblNoPairWise, ISD, MTy)) in getMinMaxReductionCost()
4732 if (const auto *Entry = CostTableLookup(SSE41CostTblNoPairWise, ISD, MTy)) in getMinMaxReductionCost()
4736 if (const auto *Entry = CostTableLookup(SSE2CostTblNoPairWise, ISD, MTy)) in getMinMaxReductionCost()
4758 if (const auto *Entry = CostTableLookup(AVX512BWCostTblNoPairWise, ISD, MTy)) in getMinMaxReductionCost()
4762 if (const auto *Entry = CostTableLookup(AVX1CostTblNoPairWise, ISD, MTy)) in getMinMaxReductionCost()
4766 if (const auto *Entry = CostTableLookup(SSE41CostTblNoPairWise, ISD, MTy)) in getMinMaxReductionCost()
4770 if (const auto *Entry = CostTableLookup(SSE2CostTblNoPairWise, ISD, MTy)) in getMinMaxReductionCost()
5400 return TLI->isOperationLegal(IsSigned ? ISD::SDIVREM : ISD::UDIVREM, VT); in hasDivRemOp()