62#define DEBUG_TYPE "x86tti"
78 std::optional<unsigned>
164 bool Vector = (ClassID == 1);
171 if (!
Vector && ST->hasEGPR())
187 auto *VTy = dyn_cast<FixedVectorType>(Ty);
188 if (!Ty->
isIntegerTy() && (!VTy || VTy->getNumElements() != 1))
191 switch (cast<IntegerType>(ScalarTy)->
getBitWidth()) {
208 if (ST->
hasAVX512() && ST->hasEVEX512() && PreferVectorWidth >= 512)
210 if (ST->
hasAVX() && PreferVectorWidth >= 256)
212 if (ST->
hasSSE1() && PreferVectorWidth >= 128)
253 if (Opcode == Instruction::Mul && Ty->
isVectorTy() &&
270 assert(ISD &&
"Invalid opcode");
272 if (ISD ==
ISD::MUL && Args.size() == 2 && LT.second.isVector() &&
273 (LT.second.getScalarType() == MVT::i32 ||
274 LT.second.getScalarType() == MVT::i64)) {
276 bool Op1Signed =
false, Op2Signed =
false;
279 unsigned OpMinSize = std::max(Op1MinSize, Op2MinSize);
280 bool SignedMode = Op1Signed || Op2Signed;
285 if (OpMinSize <= 15 && !ST->isPMADDWDSlow() &&
286 LT.second.getScalarType() == MVT::i32) {
288 isa<ConstantDataVector>(Args[0]) || isa<ConstantVector>(Args[0]);
290 isa<ConstantDataVector>(Args[1]) || isa<ConstantVector>(Args[1]);
291 bool Op1Sext = isa<SExtInst>(Args[0]) &&
292 (Op1MinSize == 15 || (Op1MinSize < 15 && !ST->
hasSSE41()));
293 bool Op2Sext = isa<SExtInst>(Args[1]) &&
294 (Op2MinSize == 15 || (Op2MinSize < 15 && !ST->
hasSSE41()));
296 bool IsZeroExtended = !Op1Signed || !Op2Signed;
297 bool IsConstant = Op1Constant || Op2Constant;
298 bool IsSext = Op1Sext || Op2Sext;
299 if (IsConstant || IsZeroExtended || IsSext)
307 if (ST->useSLMArithCosts() && LT.second == MVT::v4i32) {
310 if (!SignedMode && OpMinSize <= 8)
314 if (!SignedMode && OpMinSize <= 16)
321 if (!SignedMode && OpMinSize <= 32 && LT.second.getScalarType() == MVT::i64)
374 {
ISD::SHL, MVT::v16i8, { 1, 6, 1, 2 } },
375 {
ISD::SRL, MVT::v16i8, { 1, 6, 1, 2 } },
376 {
ISD::SRA, MVT::v16i8, { 1, 6, 1, 2 } },
377 {
ISD::SHL, MVT::v32i8, { 1, 6, 1, 2 } },
378 {
ISD::SRL, MVT::v32i8, { 1, 6, 1, 2 } },
379 {
ISD::SRA, MVT::v32i8, { 1, 6, 1, 2 } },
380 {
ISD::SHL, MVT::v64i8, { 1, 6, 1, 2 } },
381 {
ISD::SRL, MVT::v64i8, { 1, 6, 1, 2 } },
382 {
ISD::SRA, MVT::v64i8, { 1, 6, 1, 2 } },
386 if (
const auto *Entry =
388 if (
auto KindCost = Entry->Cost[
CostKind])
389 return LT.first * *KindCost;
392 {
ISD::SHL, MVT::v16i8, { 1, 7, 2, 3 } },
393 {
ISD::SRL, MVT::v16i8, { 1, 7, 2, 3 } },
394 {
ISD::SRA, MVT::v16i8, { 1, 8, 4, 5 } },
395 {
ISD::SHL, MVT::v32i8, { 1, 8, 2, 3 } },
396 {
ISD::SRL, MVT::v32i8, { 1, 8, 2, 3 } },
397 {
ISD::SRA, MVT::v32i8, { 1, 9, 4, 5 } },
398 {
ISD::SHL, MVT::v64i8, { 1, 8, 2, 3 } },
399 {
ISD::SRL, MVT::v64i8, { 1, 8, 2, 3 } },
400 {
ISD::SRA, MVT::v64i8, { 1, 9, 4, 6 } },
402 {
ISD::SHL, MVT::v16i16, { 1, 1, 1, 1 } },
403 {
ISD::SRL, MVT::v16i16, { 1, 1, 1, 1 } },
404 {
ISD::SRA, MVT::v16i16, { 1, 1, 1, 1 } },
405 {
ISD::SHL, MVT::v32i16, { 1, 1, 1, 1 } },
406 {
ISD::SRL, MVT::v32i16, { 1, 1, 1, 1 } },
407 {
ISD::SRA, MVT::v32i16, { 1, 1, 1, 1 } },
411 if (
const auto *Entry =
413 if (
auto KindCost = Entry->Cost[
CostKind])
414 return LT.first * *KindCost;
417 {
ISD::SHL, MVT::v64i8, { 2, 12, 5, 6 } },
418 {
ISD::SRL, MVT::v64i8, { 2, 12, 5, 6 } },
419 {
ISD::SRA, MVT::v64i8, { 3, 10, 12, 12 } },
421 {
ISD::SHL, MVT::v16i16, { 2, 7, 4, 4 } },
422 {
ISD::SRL, MVT::v16i16, { 2, 7, 4, 4 } },
423 {
ISD::SRA, MVT::v16i16, { 2, 7, 4, 4 } },
425 {
ISD::SHL, MVT::v8i32, { 1, 1, 1, 1 } },
426 {
ISD::SRL, MVT::v8i32, { 1, 1, 1, 1 } },
427 {
ISD::SRA, MVT::v8i32, { 1, 1, 1, 1 } },
428 {
ISD::SHL, MVT::v16i32, { 1, 1, 1, 1 } },
429 {
ISD::SRL, MVT::v16i32, { 1, 1, 1, 1 } },
430 {
ISD::SRA, MVT::v16i32, { 1, 1, 1, 1 } },
432 {
ISD::SRA, MVT::v2i64, { 1, 1, 1, 1 } },
433 {
ISD::SHL, MVT::v4i64, { 1, 1, 1, 1 } },
434 {
ISD::SRL, MVT::v4i64, { 1, 1, 1, 1 } },
435 {
ISD::SRA, MVT::v4i64, { 1, 1, 1, 1 } },
436 {
ISD::SHL, MVT::v8i64, { 1, 1, 1, 1 } },
437 {
ISD::SRL, MVT::v8i64, { 1, 1, 1, 1 } },
438 {
ISD::SRA, MVT::v8i64, { 1, 1, 1, 1 } },
447 if (
const auto *Entry =
449 if (
auto KindCost = Entry->Cost[
CostKind])
450 return LT.first * *KindCost;
453 {
ISD::SHL, MVT::v16i8, { 1, 8, 2, 3 } },
454 {
ISD::SRL, MVT::v16i8, { 1, 8, 2, 3 } },
455 {
ISD::SRA, MVT::v16i8, { 2, 10, 5, 6 } },
456 {
ISD::SHL, MVT::v32i8, { 2, 8, 2, 4 } },
457 {
ISD::SRL, MVT::v32i8, { 2, 8, 2, 4 } },
458 {
ISD::SRA, MVT::v32i8, { 3, 10, 5, 9 } },
460 {
ISD::SHL, MVT::v8i16, { 1, 1, 1, 1 } },
461 {
ISD::SRL, MVT::v8i16, { 1, 1, 1, 1 } },
462 {
ISD::SRA, MVT::v8i16, { 1, 1, 1, 1 } },
463 {
ISD::SHL, MVT::v16i16,{ 2, 2, 1, 2 } },
464 {
ISD::SRL, MVT::v16i16,{ 2, 2, 1, 2 } },
465 {
ISD::SRA, MVT::v16i16,{ 2, 2, 1, 2 } },
467 {
ISD::SHL, MVT::v4i32, { 1, 1, 1, 1 } },
468 {
ISD::SRL, MVT::v4i32, { 1, 1, 1, 1 } },
469 {
ISD::SRA, MVT::v4i32, { 1, 1, 1, 1 } },
470 {
ISD::SHL, MVT::v8i32, { 2, 2, 1, 2 } },
471 {
ISD::SRL, MVT::v8i32, { 2, 2, 1, 2 } },
472 {
ISD::SRA, MVT::v8i32, { 2, 2, 1, 2 } },
474 {
ISD::SHL, MVT::v2i64, { 1, 1, 1, 1 } },
475 {
ISD::SRL, MVT::v2i64, { 1, 1, 1, 1 } },
476 {
ISD::SRA, MVT::v2i64, { 2, 3, 3, 3 } },
477 {
ISD::SHL, MVT::v4i64, { 2, 2, 1, 2 } },
478 {
ISD::SRL, MVT::v4i64, { 2, 2, 1, 2 } },
479 {
ISD::SRA, MVT::v4i64, { 4, 4, 3, 6 } },
488 if (
const auto *Entry =
490 if (
auto KindCost = Entry->Cost[
CostKind])
491 return LT.first * *KindCost;
494 {
ISD::SHL, MVT::v16i8, { 2, 7, 2, 3 } },
495 {
ISD::SRL, MVT::v16i8, { 2, 7, 2, 3 } },
496 {
ISD::SRA, MVT::v16i8, { 3, 9, 5, 6 } },
497 {
ISD::SHL, MVT::v32i8, { 4, 7, 7, 8 } },
498 {
ISD::SRL, MVT::v32i8, { 4, 7, 7, 8 } },
499 {
ISD::SRA, MVT::v32i8, { 7, 7, 12, 13 } },
501 {
ISD::SHL, MVT::v8i16, { 1, 2, 1, 1 } },
502 {
ISD::SRL, MVT::v8i16, { 1, 2, 1, 1 } },
503 {
ISD::SRA, MVT::v8i16, { 1, 2, 1, 1 } },
504 {
ISD::SHL, MVT::v16i16,{ 3, 6, 4, 5 } },
505 {
ISD::SRL, MVT::v16i16,{ 3, 6, 4, 5 } },
506 {
ISD::SRA, MVT::v16i16,{ 3, 6, 4, 5 } },
508 {
ISD::SHL, MVT::v4i32, { 1, 2, 1, 1 } },
509 {
ISD::SRL, MVT::v4i32, { 1, 2, 1, 1 } },
510 {
ISD::SRA, MVT::v4i32, { 1, 2, 1, 1 } },
511 {
ISD::SHL, MVT::v8i32, { 3, 6, 4, 5 } },
512 {
ISD::SRL, MVT::v8i32, { 3, 6, 4, 5 } },
513 {
ISD::SRA, MVT::v8i32, { 3, 6, 4, 5 } },
515 {
ISD::SHL, MVT::v2i64, { 1, 2, 1, 1 } },
516 {
ISD::SRL, MVT::v2i64, { 1, 2, 1, 1 } },
517 {
ISD::SRA, MVT::v2i64, { 2, 3, 3, 3 } },
518 {
ISD::SHL, MVT::v4i64, { 3, 6, 4, 5 } },
519 {
ISD::SRL, MVT::v4i64, { 3, 6, 4, 5 } },
520 {
ISD::SRA, MVT::v4i64, { 5, 7, 8, 9 } },
530 (!ST->hasXOP() || LT.second.getScalarSizeInBits() != 8))
531 if (
const auto *Entry =
533 if (
auto KindCost = Entry->Cost[
CostKind])
534 return LT.first * *KindCost;
537 {
ISD::SHL, MVT::v16i8, { 1, 7, 2, 3 } },
538 {
ISD::SRL, MVT::v16i8, { 1, 7, 2, 3 } },
539 {
ISD::SRA, MVT::v16i8, { 3, 9, 5, 6 } },
541 {
ISD::SHL, MVT::v8i16, { 1, 1, 1, 1 } },
542 {
ISD::SRL, MVT::v8i16, { 1, 1, 1, 1 } },
543 {
ISD::SRA, MVT::v8i16, { 1, 1, 1, 1 } },
545 {
ISD::SHL, MVT::v4i32, { 1, 1, 1, 1 } },
546 {
ISD::SRL, MVT::v4i32, { 1, 1, 1, 1 } },
547 {
ISD::SRA, MVT::v4i32, { 1, 1, 1, 1 } },
549 {
ISD::SHL, MVT::v2i64, { 1, 1, 1, 1 } },
550 {
ISD::SRL, MVT::v2i64, { 1, 1, 1, 1 } },
551 {
ISD::SRA, MVT::v2i64, { 3, 5, 6, 6 } },
561 (!ST->hasXOP() || LT.second.getScalarSizeInBits() != 8))
562 if (
const auto *Entry =
564 if (
auto KindCost = Entry->Cost[
CostKind])
565 return LT.first * *KindCost;
580 if (
const auto *Entry =
582 if (
auto KindCost = Entry->Cost[
CostKind])
583 return LT.first * *KindCost;
603 if (
const auto *Entry =
605 if (
auto KindCost = Entry->Cost[
CostKind])
606 return LT.first * *KindCost;
626 if (
const auto *Entry =
CostTableLookup(AVX2ConstCostTable, ISD, LT.second))
627 if (
auto KindCost = Entry->Cost[
CostKind])
628 return LT.first * *KindCost;
648 if (
const auto *Entry =
CostTableLookup(AVXConstCostTable, ISD, LT.second))
649 if (
auto KindCost = Entry->Cost[
CostKind])
650 return LT.first * *KindCost;
658 if (
const auto *Entry =
660 if (
auto KindCost = Entry->Cost[
CostKind])
661 return LT.first * *KindCost;
681 if (
const auto *Entry =
CostTableLookup(SSE2ConstCostTable, ISD, LT.second))
682 if (
auto KindCost = Entry->Cost[
CostKind])
683 return LT.first * *KindCost;
686 {
ISD::SHL, MVT::v16i8, { 3, 5, 5, 7 } },
687 {
ISD::SRL, MVT::v16i8, { 3,10, 5, 8 } },
688 {
ISD::SRA, MVT::v16i8, { 4,12, 8,12 } },
689 {
ISD::SHL, MVT::v32i8, { 4, 7, 6, 8 } },
690 {
ISD::SRL, MVT::v32i8, { 4, 8, 7, 9 } },
691 {
ISD::SRA, MVT::v32i8, { 5,10,10,13 } },
692 {
ISD::SHL, MVT::v64i8, { 4, 7, 6, 8 } },
693 {
ISD::SRL, MVT::v64i8, { 4, 8, 7,10 } },
694 {
ISD::SRA, MVT::v64i8, { 5,10,10,15 } },
696 {
ISD::SHL, MVT::v32i16, { 2, 4, 2, 3 } },
697 {
ISD::SRL, MVT::v32i16, { 2, 4, 2, 3 } },
698 {
ISD::SRA, MVT::v32i16, { 2, 4, 2, 3 } },
702 if (
const auto *Entry =
704 if (
auto KindCost = Entry->Cost[
CostKind])
705 return LT.first * *KindCost;
708 {
ISD::SHL, MVT::v32i16, { 5,10, 5, 7 } },
709 {
ISD::SRL, MVT::v32i16, { 5,10, 5, 7 } },
710 {
ISD::SRA, MVT::v32i16, { 5,10, 5, 7 } },
712 {
ISD::SHL, MVT::v16i32, { 2, 4, 2, 3 } },
713 {
ISD::SRL, MVT::v16i32, { 2, 4, 2, 3 } },
714 {
ISD::SRA, MVT::v16i32, { 2, 4, 2, 3 } },
716 {
ISD::SRA, MVT::v2i64, { 1, 2, 1, 2 } },
717 {
ISD::SHL, MVT::v4i64, { 1, 4, 1, 2 } },
718 {
ISD::SRL, MVT::v4i64, { 1, 4, 1, 2 } },
719 {
ISD::SRA, MVT::v4i64, { 1, 4, 1, 2 } },
720 {
ISD::SHL, MVT::v8i64, { 1, 4, 1, 2 } },
721 {
ISD::SRL, MVT::v8i64, { 1, 4, 1, 2 } },
722 {
ISD::SRA, MVT::v8i64, { 1, 4, 1, 2 } },
726 if (
const auto *Entry =
728 if (
auto KindCost = Entry->Cost[
CostKind])
729 return LT.first * *KindCost;
733 {
ISD::SHL, MVT::v16i8, { 3, 5, 5, 7 } },
734 {
ISD::SRL, MVT::v16i8, { 3, 9, 5, 8 } },
735 {
ISD::SRA, MVT::v16i8, { 4, 5, 9,13 } },
736 {
ISD::SHL, MVT::v32i8, { 4, 7, 6, 8 } },
737 {
ISD::SRL, MVT::v32i8, { 4, 8, 7, 9 } },
738 {
ISD::SRA, MVT::v32i8, { 6, 9,11,16 } },
740 {
ISD::SHL, MVT::v8i16, { 1, 2, 1, 2 } },
741 {
ISD::SRL, MVT::v8i16, { 1, 2, 1, 2 } },
742 {
ISD::SRA, MVT::v8i16, { 1, 2, 1, 2 } },
743 {
ISD::SHL, MVT::v16i16, { 2, 4, 2, 3 } },
744 {
ISD::SRL, MVT::v16i16, { 2, 4, 2, 3 } },
745 {
ISD::SRA, MVT::v16i16, { 2, 4, 2, 3 } },
747 {
ISD::SHL, MVT::v4i32, { 1, 2, 1, 2 } },
748 {
ISD::SRL, MVT::v4i32, { 1, 2, 1, 2 } },
749 {
ISD::SRA, MVT::v4i32, { 1, 2, 1, 2 } },
750 {
ISD::SHL, MVT::v8i32, { 2, 4, 2, 3 } },
751 {
ISD::SRL, MVT::v8i32, { 2, 4, 2, 3 } },
752 {
ISD::SRA, MVT::v8i32, { 2, 4, 2, 3 } },
754 {
ISD::SHL, MVT::v2i64, { 1, 2, 1, 2 } },
755 {
ISD::SRL, MVT::v2i64, { 1, 2, 1, 2 } },
756 {
ISD::SRA, MVT::v2i64, { 2, 4, 5, 7 } },
757 {
ISD::SHL, MVT::v4i64, { 2, 4, 1, 2 } },
758 {
ISD::SRL, MVT::v4i64, { 2, 4, 1, 2 } },
759 {
ISD::SRA, MVT::v4i64, { 4, 6, 5, 9 } },
763 if (
const auto *Entry =
765 if (
auto KindCost = Entry->Cost[
CostKind])
766 return LT.first * *KindCost;
769 {
ISD::SHL, MVT::v16i8, { 4, 4, 6, 8 } },
770 {
ISD::SRL, MVT::v16i8, { 4, 8, 5, 8 } },
771 {
ISD::SRA, MVT::v16i8, { 6, 6, 9,13 } },
772 {
ISD::SHL, MVT::v32i8, { 7, 8,11,14 } },
773 {
ISD::SRL, MVT::v32i8, { 7, 9,10,14 } },
774 {
ISD::SRA, MVT::v32i8, { 10,11,16,21 } },
776 {
ISD::SHL, MVT::v8i16, { 1, 3, 1, 2 } },
777 {
ISD::SRL, MVT::v8i16, { 1, 3, 1, 2 } },
778 {
ISD::SRA, MVT::v8i16, { 1, 3, 1, 2 } },
779 {
ISD::SHL, MVT::v16i16, { 3, 7, 5, 7 } },
780 {
ISD::SRL, MVT::v16i16, { 3, 7, 5, 7 } },
781 {
ISD::SRA, MVT::v16i16, { 3, 7, 5, 7 } },
783 {
ISD::SHL, MVT::v4i32, { 1, 3, 1, 2 } },
784 {
ISD::SRL, MVT::v4i32, { 1, 3, 1, 2 } },
785 {
ISD::SRA, MVT::v4i32, { 1, 3, 1, 2 } },
786 {
ISD::SHL, MVT::v8i32, { 3, 7, 5, 7 } },
787 {
ISD::SRL, MVT::v8i32, { 3, 7, 5, 7 } },
788 {
ISD::SRA, MVT::v8i32, { 3, 7, 5, 7 } },
790 {
ISD::SHL, MVT::v2i64, { 1, 3, 1, 2 } },
791 {
ISD::SRL, MVT::v2i64, { 1, 3, 1, 2 } },
792 {
ISD::SRA, MVT::v2i64, { 3, 4, 5, 7 } },
793 {
ISD::SHL, MVT::v4i64, { 3, 7, 4, 6 } },
794 {
ISD::SRL, MVT::v4i64, { 3, 7, 4, 6 } },
795 {
ISD::SRA, MVT::v4i64, { 6, 7,10,13 } },
800 (!ST->hasXOP() || LT.second.getScalarSizeInBits() != 8))
801 if (
const auto *Entry =
803 if (
auto KindCost = Entry->Cost[
CostKind])
804 return LT.first * *KindCost;
808 {
ISD::SHL, MVT::v16i8, { 9, 10, 6, 9 } },
809 {
ISD::SRL, MVT::v16i8, { 9, 13, 5, 9 } },
810 {
ISD::SRA, MVT::v16i8, { 11, 15, 9,13 } },
812 {
ISD::SHL, MVT::v8i16, { 2, 2, 1, 2 } },
813 {
ISD::SRL, MVT::v8i16, { 2, 2, 1, 2 } },
814 {
ISD::SRA, MVT::v8i16, { 2, 2, 1, 2 } },
816 {
ISD::SHL, MVT::v4i32, { 2, 2, 1, 2 } },
817 {
ISD::SRL, MVT::v4i32, { 2, 2, 1, 2 } },
818 {
ISD::SRA, MVT::v4i32, { 2, 2, 1, 2 } },
820 {
ISD::SHL, MVT::v2i64, { 2, 2, 1, 2 } },
821 {
ISD::SRL, MVT::v2i64, { 2, 2, 1, 2 } },
822 {
ISD::SRA, MVT::v2i64, { 5, 9, 5, 7 } },
826 (!ST->hasXOP() || LT.second.getScalarSizeInBits() != 8))
827 if (
const auto *Entry =
829 if (
auto KindCost = Entry->Cost[
CostKind])
830 return LT.first * *KindCost;
833 {
ISD::MUL, MVT::v2i64, { 2, 15, 1, 3 } },
834 {
ISD::MUL, MVT::v4i64, { 2, 15, 1, 3 } },
835 {
ISD::MUL, MVT::v8i64, { 3, 15, 1, 3 } }
840 if (
const auto *Entry =
CostTableLookup(AVX512DQCostTable, ISD, LT.second))
841 if (
auto KindCost = Entry->Cost[
CostKind])
842 return LT.first * *KindCost;
845 {
ISD::SHL, MVT::v16i8, { 4, 8, 4, 5 } },
846 {
ISD::SRL, MVT::v16i8, { 4, 8, 4, 5 } },
847 {
ISD::SRA, MVT::v16i8, { 4, 8, 4, 5 } },
848 {
ISD::SHL, MVT::v32i8, { 4, 23,11,16 } },
849 {
ISD::SRL, MVT::v32i8, { 4, 30,12,18 } },
850 {
ISD::SRA, MVT::v32i8, { 6, 13,24,30 } },
851 {
ISD::SHL, MVT::v64i8, { 6, 19,13,15 } },
852 {
ISD::SRL, MVT::v64i8, { 7, 27,15,18 } },
853 {
ISD::SRA, MVT::v64i8, { 15, 15,30,30 } },
855 {
ISD::SHL, MVT::v8i16, { 1, 1, 1, 1 } },
856 {
ISD::SRL, MVT::v8i16, { 1, 1, 1, 1 } },
857 {
ISD::SRA, MVT::v8i16, { 1, 1, 1, 1 } },
858 {
ISD::SHL, MVT::v16i16, { 1, 1, 1, 1 } },
859 {
ISD::SRL, MVT::v16i16, { 1, 1, 1, 1 } },
860 {
ISD::SRA, MVT::v16i16, { 1, 1, 1, 1 } },
861 {
ISD::SHL, MVT::v32i16, { 1, 1, 1, 1 } },
862 {
ISD::SRL, MVT::v32i16, { 1, 1, 1, 1 } },
863 {
ISD::SRA, MVT::v32i16, { 1, 1, 1, 1 } },
865 {
ISD::ADD, MVT::v64i8, { 1, 1, 1, 1 } },
866 {
ISD::ADD, MVT::v32i16, { 1, 1, 1, 1 } },
868 {
ISD::ADD, MVT::v32i8, { 1, 1, 1, 1 } },
869 {
ISD::ADD, MVT::v16i16, { 1, 1, 1, 1 } },
870 {
ISD::ADD, MVT::v8i32, { 1, 1, 1, 1 } },
871 {
ISD::ADD, MVT::v4i64, { 1, 1, 1, 1 } },
873 {
ISD::SUB, MVT::v64i8, { 1, 1, 1, 1 } },
874 {
ISD::SUB, MVT::v32i16, { 1, 1, 1, 1 } },
876 {
ISD::MUL, MVT::v16i8, { 4, 12, 4, 5 } },
877 {
ISD::MUL, MVT::v32i8, { 3, 10, 7,10 } },
878 {
ISD::MUL, MVT::v64i8, { 3, 11, 7,10 } },
879 {
ISD::MUL, MVT::v32i16, { 1, 5, 1, 1 } },
881 {
ISD::SUB, MVT::v32i8, { 1, 1, 1, 1 } },
882 {
ISD::SUB, MVT::v16i16, { 1, 1, 1, 1 } },
883 {
ISD::SUB, MVT::v8i32, { 1, 1, 1, 1 } },
884 {
ISD::SUB, MVT::v4i64, { 1, 1, 1, 1 } },
889 if (
const auto *Entry =
CostTableLookup(AVX512BWCostTable, ISD, LT.second))
890 if (
auto KindCost = Entry->Cost[
CostKind])
891 return LT.first * *KindCost;
894 {
ISD::SHL, MVT::v64i8, { 15, 19,27,33 } },
895 {
ISD::SRL, MVT::v64i8, { 15, 19,30,36 } },
896 {
ISD::SRA, MVT::v64i8, { 37, 37,51,63 } },
898 {
ISD::SHL, MVT::v32i16, { 11, 16,11,15 } },
899 {
ISD::SRL, MVT::v32i16, { 11, 16,11,15 } },
900 {
ISD::SRA, MVT::v32i16, { 11, 16,11,15 } },
902 {
ISD::SHL, MVT::v4i32, { 1, 1, 1, 1 } },
903 {
ISD::SRL, MVT::v4i32, { 1, 1, 1, 1 } },
904 {
ISD::SRA, MVT::v4i32, { 1, 1, 1, 1 } },
905 {
ISD::SHL, MVT::v8i32, { 1, 1, 1, 1 } },
906 {
ISD::SRL, MVT::v8i32, { 1, 1, 1, 1 } },
907 {
ISD::SRA, MVT::v8i32, { 1, 1, 1, 1 } },
908 {
ISD::SHL, MVT::v16i32, { 1, 1, 1, 1 } },
909 {
ISD::SRL, MVT::v16i32, { 1, 1, 1, 1 } },
910 {
ISD::SRA, MVT::v16i32, { 1, 1, 1, 1 } },
912 {
ISD::SHL, MVT::v2i64, { 1, 1, 1, 1 } },
913 {
ISD::SRL, MVT::v2i64, { 1, 1, 1, 1 } },
914 {
ISD::SRA, MVT::v2i64, { 1, 1, 1, 1 } },
915 {
ISD::SHL, MVT::v4i64, { 1, 1, 1, 1 } },
916 {
ISD::SRL, MVT::v4i64, { 1, 1, 1, 1 } },
917 {
ISD::SRA, MVT::v4i64, { 1, 1, 1, 1 } },
918 {
ISD::SHL, MVT::v8i64, { 1, 1, 1, 1 } },
919 {
ISD::SRL, MVT::v8i64, { 1, 1, 1, 1 } },
920 {
ISD::SRA, MVT::v8i64, { 1, 1, 1, 1 } },
922 {
ISD::ADD, MVT::v64i8, { 3, 7, 5, 5 } },
923 {
ISD::ADD, MVT::v32i16, { 3, 7, 5, 5 } },
925 {
ISD::SUB, MVT::v64i8, { 3, 7, 5, 5 } },
926 {
ISD::SUB, MVT::v32i16, { 3, 7, 5, 5 } },
928 {
ISD::AND, MVT::v32i8, { 1, 1, 1, 1 } },
929 {
ISD::AND, MVT::v16i16, { 1, 1, 1, 1 } },
930 {
ISD::AND, MVT::v8i32, { 1, 1, 1, 1 } },
931 {
ISD::AND, MVT::v4i64, { 1, 1, 1, 1 } },
933 {
ISD::OR, MVT::v32i8, { 1, 1, 1, 1 } },
934 {
ISD::OR, MVT::v16i16, { 1, 1, 1, 1 } },
935 {
ISD::OR, MVT::v8i32, { 1, 1, 1, 1 } },
936 {
ISD::OR, MVT::v4i64, { 1, 1, 1, 1 } },
938 {
ISD::XOR, MVT::v32i8, { 1, 1, 1, 1 } },
939 {
ISD::XOR, MVT::v16i16, { 1, 1, 1, 1 } },
940 {
ISD::XOR, MVT::v8i32, { 1, 1, 1, 1 } },
941 {
ISD::XOR, MVT::v4i64, { 1, 1, 1, 1 } },
943 {
ISD::MUL, MVT::v16i32, { 1, 10, 1, 2 } },
944 {
ISD::MUL, MVT::v8i32, { 1, 10, 1, 2 } },
945 {
ISD::MUL, MVT::v4i32, { 1, 10, 1, 2 } },
946 {
ISD::MUL, MVT::v8i64, { 6, 9, 8, 8 } },
951 {
ISD::FNEG, MVT::v8f64, { 1, 1, 1, 2 } },
952 {
ISD::FADD, MVT::v8f64, { 1, 4, 1, 1 } },
953 {
ISD::FADD, MVT::v4f64, { 1, 4, 1, 1 } },
954 {
ISD::FSUB, MVT::v8f64, { 1, 4, 1, 1 } },
955 {
ISD::FSUB, MVT::v4f64, { 1, 4, 1, 1 } },
956 {
ISD::FMUL, MVT::v8f64, { 1, 4, 1, 1 } },
957 {
ISD::FMUL, MVT::v4f64, { 1, 4, 1, 1 } },
958 {
ISD::FMUL, MVT::v2f64, { 1, 4, 1, 1 } },
961 {
ISD::FDIV, MVT::f64, { 4, 14, 1, 1 } },
962 {
ISD::FDIV, MVT::v2f64, { 4, 14, 1, 1 } },
963 {
ISD::FDIV, MVT::v4f64, { 8, 14, 1, 1 } },
964 {
ISD::FDIV, MVT::v8f64, { 16, 23, 1, 3 } },
966 {
ISD::FNEG, MVT::v16f32, { 1, 1, 1, 2 } },
967 {
ISD::FADD, MVT::v16f32, { 1, 4, 1, 1 } },
968 {
ISD::FADD, MVT::v8f32, { 1, 4, 1, 1 } },
969 {
ISD::FSUB, MVT::v16f32, { 1, 4, 1, 1 } },
970 {
ISD::FSUB, MVT::v8f32, { 1, 4, 1, 1 } },
971 {
ISD::FMUL, MVT::v16f32, { 1, 4, 1, 1 } },
972 {
ISD::FMUL, MVT::v8f32, { 1, 4, 1, 1 } },
973 {
ISD::FMUL, MVT::v4f32, { 1, 4, 1, 1 } },
976 {
ISD::FDIV, MVT::f32, { 3, 11, 1, 1 } },
977 {
ISD::FDIV, MVT::v4f32, { 3, 11, 1, 1 } },
978 {
ISD::FDIV, MVT::v8f32, { 5, 11, 1, 1 } },
979 {
ISD::FDIV, MVT::v16f32, { 10, 18, 1, 3 } },
983 if (
const auto *Entry =
CostTableLookup(AVX512CostTable, ISD, LT.second))
984 if (
auto KindCost = Entry->Cost[
CostKind])
985 return LT.first * *KindCost;
990 {
ISD::SHL, MVT::v4i32, { 2, 3, 1, 3 } },
991 {
ISD::SRL, MVT::v4i32, { 2, 3, 1, 3 } },
992 {
ISD::SRA, MVT::v4i32, { 2, 3, 1, 3 } },
993 {
ISD::SHL, MVT::v8i32, { 4, 4, 1, 3 } },
994 {
ISD::SRL, MVT::v8i32, { 4, 4, 1, 3 } },
995 {
ISD::SRA, MVT::v8i32, { 4, 4, 1, 3 } },
996 {
ISD::SHL, MVT::v2i64, { 2, 3, 1, 1 } },
997 {
ISD::SRL, MVT::v2i64, { 2, 3, 1, 1 } },
998 {
ISD::SHL, MVT::v4i64, { 4, 4, 1, 2 } },
999 {
ISD::SRL, MVT::v4i64, { 4, 4, 1, 2 } },
1011 if (ST->
hasAVX2() && !(ST->hasXOP() && LT.second == MVT::v4i32)) {
1012 if (ISD ==
ISD::SHL && LT.second == MVT::v16i16 &&
1019 if (
const auto *Entry =
CostTableLookup(AVX2ShiftCostTable, ISD, LT.second))
1020 if (
auto KindCost = Entry->Cost[
CostKind])
1021 return LT.first * *KindCost;
1026 {
ISD::SHL, MVT::v16i8, { 1, 3, 1, 1 } },
1027 {
ISD::SRL, MVT::v16i8, { 2, 3, 1, 1 } },
1028 {
ISD::SRA, MVT::v16i8, { 2, 3, 1, 1 } },
1029 {
ISD::SHL, MVT::v8i16, { 1, 3, 1, 1 } },
1030 {
ISD::SRL, MVT::v8i16, { 2, 3, 1, 1 } },
1031 {
ISD::SRA, MVT::v8i16, { 2, 3, 1, 1 } },
1032 {
ISD::SHL, MVT::v4i32, { 1, 3, 1, 1 } },
1033 {
ISD::SRL, MVT::v4i32, { 2, 3, 1, 1 } },
1034 {
ISD::SRA, MVT::v4i32, { 2, 3, 1, 1 } },
1035 {
ISD::SHL, MVT::v2i64, { 1, 3, 1, 1 } },
1036 {
ISD::SRL, MVT::v2i64, { 2, 3, 1, 1 } },
1037 {
ISD::SRA, MVT::v2i64, { 2, 3, 1, 1 } },
1039 {
ISD::SHL, MVT::v32i8, { 4, 7, 5, 6 } },
1040 {
ISD::SRL, MVT::v32i8, { 6, 7, 5, 6 } },
1041 {
ISD::SRA, MVT::v32i8, { 6, 7, 5, 6 } },
1042 {
ISD::SHL, MVT::v16i16, { 4, 7, 5, 6 } },
1043 {
ISD::SRL, MVT::v16i16, { 6, 7, 5, 6 } },
1044 {
ISD::SRA, MVT::v16i16, { 6, 7, 5, 6 } },
1045 {
ISD::SHL, MVT::v8i32, { 4, 7, 5, 6 } },
1046 {
ISD::SRL, MVT::v8i32, { 6, 7, 5, 6 } },
1047 {
ISD::SRA, MVT::v8i32, { 6, 7, 5, 6 } },
1048 {
ISD::SHL, MVT::v4i64, { 4, 7, 5, 6 } },
1049 {
ISD::SRL, MVT::v4i64, { 6, 7, 5, 6 } },
1050 {
ISD::SRA, MVT::v4i64, { 6, 7, 5, 6 } },
1060 if (
const auto *Entry =
1062 if (
auto KindCost = Entry->Cost[
CostKind])
1063 return LT.first * *KindCost;
1070 if (((VT == MVT::v8i16 || VT == MVT::v4i32) && ST->
hasSSE2()) ||
1071 ((VT == MVT::v16i16 || VT == MVT::v8i32) && ST->
hasAVX()))
1076 {
ISD::FDIV, MVT::f32, { 18, 19, 1, 1 } },
1077 {
ISD::FDIV, MVT::v4f32, { 35, 36, 1, 1 } },
1078 {
ISD::FDIV, MVT::f64, { 33, 34, 1, 1 } },
1079 {
ISD::FDIV, MVT::v2f64, { 65, 66, 1, 1 } },
1082 if (ST->useGLMDivSqrtCosts())
1083 if (
const auto *Entry =
CostTableLookup(GLMCostTable, ISD, LT.second))
1084 if (
auto KindCost = Entry->Cost[
CostKind])
1085 return LT.first * *KindCost;
1088 {
ISD::MUL, MVT::v4i32, { 11, 11, 1, 7 } },
1089 {
ISD::MUL, MVT::v8i16, { 2, 5, 1, 1 } },
1090 {
ISD::FMUL, MVT::f64, { 2, 5, 1, 1 } },
1091 {
ISD::FMUL, MVT::f32, { 1, 4, 1, 1 } },
1092 {
ISD::FMUL, MVT::v2f64, { 4, 7, 1, 1 } },
1093 {
ISD::FMUL, MVT::v4f32, { 2, 5, 1, 1 } },
1094 {
ISD::FDIV, MVT::f32, { 17, 19, 1, 1 } },
1095 {
ISD::FDIV, MVT::v4f32, { 39, 39, 1, 6 } },
1096 {
ISD::FDIV, MVT::f64, { 32, 34, 1, 1 } },
1097 {
ISD::FDIV, MVT::v2f64, { 69, 69, 1, 6 } },
1098 {
ISD::FADD, MVT::v2f64, { 2, 4, 1, 1 } },
1099 {
ISD::FSUB, MVT::v2f64, { 2, 4, 1, 1 } },
1105 {
ISD::MUL, MVT::v2i64, { 17, 22, 9, 9 } },
1107 {
ISD::ADD, MVT::v2i64, { 4, 2, 1, 2 } },
1108 {
ISD::SUB, MVT::v2i64, { 4, 2, 1, 2 } },
1111 if (ST->useSLMArithCosts())
1112 if (
const auto *Entry =
CostTableLookup(SLMCostTable, ISD, LT.second))
1113 if (
auto KindCost = Entry->Cost[
CostKind])
1114 return LT.first * *KindCost;
1117 {
ISD::SHL, MVT::v16i8, { 6, 21,11,16 } },
1118 {
ISD::SHL, MVT::v32i8, { 6, 23,11,22 } },
1119 {
ISD::SHL, MVT::v8i16, { 5, 18, 5,10 } },
1120 {
ISD::SHL, MVT::v16i16, { 8, 10,10,14 } },
1122 {
ISD::SRL, MVT::v16i8, { 6, 27,12,18 } },
1123 {
ISD::SRL, MVT::v32i8, { 8, 30,12,24 } },
1124 {
ISD::SRL, MVT::v8i16, { 5, 11, 5,10 } },
1125 {
ISD::SRL, MVT::v16i16, { 8, 10,10,14 } },
1127 {
ISD::SRA, MVT::v16i8, { 17, 17,24,30 } },
1128 {
ISD::SRA, MVT::v32i8, { 18, 20,24,43 } },
1129 {
ISD::SRA, MVT::v8i16, { 5, 11, 5,10 } },
1130 {
ISD::SRA, MVT::v16i16, { 8, 10,10,14 } },
1131 {
ISD::SRA, MVT::v2i64, { 4, 5, 5, 5 } },
1132 {
ISD::SRA, MVT::v4i64, { 8, 8, 5, 9 } },
1134 {
ISD::SUB, MVT::v32i8, { 1, 1, 1, 2 } },
1135 {
ISD::ADD, MVT::v32i8, { 1, 1, 1, 2 } },
1136 {
ISD::SUB, MVT::v16i16, { 1, 1, 1, 2 } },
1137 {
ISD::ADD, MVT::v16i16, { 1, 1, 1, 2 } },
1138 {
ISD::SUB, MVT::v8i32, { 1, 1, 1, 2 } },
1139 {
ISD::ADD, MVT::v8i32, { 1, 1, 1, 2 } },
1140 {
ISD::SUB, MVT::v4i64, { 1, 1, 1, 2 } },
1141 {
ISD::ADD, MVT::v4i64, { 1, 1, 1, 2 } },
1143 {
ISD::MUL, MVT::v16i8, { 5, 18, 6,12 } },
1144 {
ISD::MUL, MVT::v32i8, { 4, 8, 8,16 } },
1145 {
ISD::MUL, MVT::v16i16, { 2, 5, 1, 2 } },
1146 {
ISD::MUL, MVT::v8i32, { 4, 10, 1, 2 } },
1147 {
ISD::MUL, MVT::v4i32, { 2, 10, 1, 2 } },
1148 {
ISD::MUL, MVT::v4i64, { 6, 10, 8,13 } },
1149 {
ISD::MUL, MVT::v2i64, { 6, 10, 8, 8 } },
1153 {
ISD::FNEG, MVT::v4f64, { 1, 1, 1, 2 } },
1154 {
ISD::FNEG, MVT::v8f32, { 1, 1, 1, 2 } },
1156 {
ISD::FADD, MVT::f64, { 1, 4, 1, 1 } },
1157 {
ISD::FADD, MVT::f32, { 1, 4, 1, 1 } },
1158 {
ISD::FADD, MVT::v2f64, { 1, 4, 1, 1 } },
1159 {
ISD::FADD, MVT::v4f32, { 1, 4, 1, 1 } },
1160 {
ISD::FADD, MVT::v4f64, { 1, 4, 1, 2 } },
1161 {
ISD::FADD, MVT::v8f32, { 1, 4, 1, 2 } },
1163 {
ISD::FSUB, MVT::f64, { 1, 4, 1, 1 } },
1164 {
ISD::FSUB, MVT::f32, { 1, 4, 1, 1 } },
1165 {
ISD::FSUB, MVT::v2f64, { 1, 4, 1, 1 } },
1166 {
ISD::FSUB, MVT::v4f32, { 1, 4, 1, 1 } },
1167 {
ISD::FSUB, MVT::v4f64, { 1, 4, 1, 2 } },
1168 {
ISD::FSUB, MVT::v8f32, { 1, 4, 1, 2 } },
1170 {
ISD::FMUL, MVT::f64, { 1, 5, 1, 1 } },
1171 {
ISD::FMUL, MVT::f32, { 1, 5, 1, 1 } },
1172 {
ISD::FMUL, MVT::v2f64, { 1, 5, 1, 1 } },
1173 {
ISD::FMUL, MVT::v4f32, { 1, 5, 1, 1 } },
1174 {
ISD::FMUL, MVT::v4f64, { 1, 5, 1, 2 } },
1175 {
ISD::FMUL, MVT::v8f32, { 1, 5, 1, 2 } },
1177 {
ISD::FDIV, MVT::f32, { 7, 13, 1, 1 } },
1178 {
ISD::FDIV, MVT::v4f32, { 7, 13, 1, 1 } },
1179 {
ISD::FDIV, MVT::v8f32, { 14, 21, 1, 3 } },
1180 {
ISD::FDIV, MVT::f64, { 14, 20, 1, 1 } },
1181 {
ISD::FDIV, MVT::v2f64, { 14, 20, 1, 1 } },
1182 {
ISD::FDIV, MVT::v4f64, { 28, 35, 1, 3 } },
1187 if (
const auto *Entry =
CostTableLookup(AVX2CostTable, ISD, LT.second))
1188 if (
auto KindCost = Entry->Cost[
CostKind])
1189 return LT.first * *KindCost;
1195 {
ISD::MUL, MVT::v32i8, { 10, 11, 18, 19 } },
1196 {
ISD::MUL, MVT::v16i8, { 5, 6, 8, 12 } },
1197 {
ISD::MUL, MVT::v16i16, { 4, 8, 5, 6 } },
1198 {
ISD::MUL, MVT::v8i32, { 5, 8, 5, 10 } },
1199 {
ISD::MUL, MVT::v4i32, { 2, 5, 1, 3 } },
1200 {
ISD::MUL, MVT::v4i64, { 12, 15, 19, 20 } },
1202 {
ISD::AND, MVT::v32i8, { 1, 1, 1, 2 } },
1203 {
ISD::AND, MVT::v16i16, { 1, 1, 1, 2 } },
1204 {
ISD::AND, MVT::v8i32, { 1, 1, 1, 2 } },
1205 {
ISD::AND, MVT::v4i64, { 1, 1, 1, 2 } },
1207 {
ISD::OR, MVT::v32i8, { 1, 1, 1, 2 } },
1208 {
ISD::OR, MVT::v16i16, { 1, 1, 1, 2 } },
1209 {
ISD::OR, MVT::v8i32, { 1, 1, 1, 2 } },
1210 {
ISD::OR, MVT::v4i64, { 1, 1, 1, 2 } },
1212 {
ISD::XOR, MVT::v32i8, { 1, 1, 1, 2 } },
1213 {
ISD::XOR, MVT::v16i16, { 1, 1, 1, 2 } },
1214 {
ISD::XOR, MVT::v8i32, { 1, 1, 1, 2 } },
1215 {
ISD::XOR, MVT::v4i64, { 1, 1, 1, 2 } },
1217 {
ISD::SUB, MVT::v32i8, { 4, 2, 5, 6 } },
1218 {
ISD::ADD, MVT::v32i8, { 4, 2, 5, 6 } },
1219 {
ISD::SUB, MVT::v16i16, { 4, 2, 5, 6 } },
1220 {
ISD::ADD, MVT::v16i16, { 4, 2, 5, 6 } },
1221 {
ISD::SUB, MVT::v8i32, { 4, 2, 5, 6 } },
1222 {
ISD::ADD, MVT::v8i32, { 4, 2, 5, 6 } },
1223 {
ISD::SUB, MVT::v4i64, { 4, 2, 5, 6 } },
1224 {
ISD::ADD, MVT::v4i64, { 4, 2, 5, 6 } },
1225 {
ISD::SUB, MVT::v2i64, { 1, 1, 1, 1 } },
1226 {
ISD::ADD, MVT::v2i64, { 1, 1, 1, 1 } },
1228 {
ISD::SHL, MVT::v16i8, { 10, 21,11,17 } },
1229 {
ISD::SHL, MVT::v32i8, { 22, 22,27,40 } },
1230 {
ISD::SHL, MVT::v8i16, { 6, 9,11,11 } },
1231 {
ISD::SHL, MVT::v16i16, { 13, 16,24,25 } },
1232 {
ISD::SHL, MVT::v4i32, { 3, 11, 4, 6 } },
1233 {
ISD::SHL, MVT::v8i32, { 9, 11,12,17 } },
1234 {
ISD::SHL, MVT::v2i64, { 2, 4, 4, 6 } },
1235 {
ISD::SHL, MVT::v4i64, { 6, 7,11,15 } },
1237 {
ISD::SRL, MVT::v16i8, { 11, 27,12,18 } },
1238 {
ISD::SRL, MVT::v32i8, { 23, 23,30,43 } },
1239 {
ISD::SRL, MVT::v8i16, { 13, 16,14,22 } },
1240 {
ISD::SRL, MVT::v16i16, { 28, 30,31,48 } },
1241 {
ISD::SRL, MVT::v4i32, { 6, 7,12,16 } },
1242 {
ISD::SRL, MVT::v8i32, { 14, 14,26,34 } },
1243 {
ISD::SRL, MVT::v2i64, { 2, 4, 4, 6 } },
1244 {
ISD::SRL, MVT::v4i64, { 6, 7,11,15 } },
1246 {
ISD::SRA, MVT::v16i8, { 21, 22,24,36 } },
1247 {
ISD::SRA, MVT::v32i8, { 44, 45,51,76 } },
1248 {
ISD::SRA, MVT::v8i16, { 13, 16,14,22 } },
1249 {
ISD::SRA, MVT::v16i16, { 28, 30,31,48 } },
1250 {
ISD::SRA, MVT::v4i32, { 6, 7,12,16 } },
1251 {
ISD::SRA, MVT::v8i32, { 14, 14,26,34 } },
1252 {
ISD::SRA, MVT::v2i64, { 5, 6,10,14 } },
1253 {
ISD::SRA, MVT::v4i64, { 12, 12,22,30 } },
1255 {
ISD::FNEG, MVT::v4f64, { 2, 2, 1, 2 } },
1256 {
ISD::FNEG, MVT::v8f32, { 2, 2, 1, 2 } },
1258 {
ISD::FADD, MVT::f64, { 1, 5, 1, 1 } },
1259 {
ISD::FADD, MVT::f32, { 1, 5, 1, 1 } },
1260 {
ISD::FADD, MVT::v2f64, { 1, 5, 1, 1 } },
1261 {
ISD::FADD, MVT::v4f32, { 1, 5, 1, 1 } },
1262 {
ISD::FADD, MVT::v4f64, { 2, 5, 1, 2 } },
1263 {
ISD::FADD, MVT::v8f32, { 2, 5, 1, 2 } },
1265 {
ISD::FSUB, MVT::f64, { 1, 5, 1, 1 } },
1266 {
ISD::FSUB, MVT::f32, { 1, 5, 1, 1 } },
1267 {
ISD::FSUB, MVT::v2f64, { 1, 5, 1, 1 } },
1268 {
ISD::FSUB, MVT::v4f32, { 1, 5, 1, 1 } },
1269 {
ISD::FSUB, MVT::v4f64, { 2, 5, 1, 2 } },
1270 {
ISD::FSUB, MVT::v8f32, { 2, 5, 1, 2 } },
1272 {
ISD::FMUL, MVT::f64, { 2, 5, 1, 1 } },
1273 {
ISD::FMUL, MVT::f32, { 1, 5, 1, 1 } },
1274 {
ISD::FMUL, MVT::v2f64, { 2, 5, 1, 1 } },
1275 {
ISD::FMUL, MVT::v4f32, { 1, 5, 1, 1 } },
1276 {
ISD::FMUL, MVT::v4f64, { 4, 5, 1, 2 } },
1277 {
ISD::FMUL, MVT::v8f32, { 2, 5, 1, 2 } },
1279 {
ISD::FDIV, MVT::f32, { 14, 14, 1, 1 } },
1280 {
ISD::FDIV, MVT::v4f32, { 14, 14, 1, 1 } },
1281 {
ISD::FDIV, MVT::v8f32, { 28, 29, 1, 3 } },
1282 {
ISD::FDIV, MVT::f64, { 22, 22, 1, 1 } },
1283 {
ISD::FDIV, MVT::v2f64, { 22, 22, 1, 1 } },
1284 {
ISD::FDIV, MVT::v4f64, { 44, 45, 1, 3 } },
1288 if (
const auto *Entry =
CostTableLookup(AVX1CostTable, ISD, LT.second))
1289 if (
auto KindCost = Entry->Cost[
CostKind])
1290 return LT.first * *KindCost;
1293 {
ISD::FADD, MVT::f64, { 1, 3, 1, 1 } },
1294 {
ISD::FADD, MVT::f32, { 1, 3, 1, 1 } },
1295 {
ISD::FADD, MVT::v2f64, { 1, 3, 1, 1 } },
1296 {
ISD::FADD, MVT::v4f32, { 1, 3, 1, 1 } },
1298 {
ISD::FSUB, MVT::f64, { 1, 3, 1, 1 } },
1299 {
ISD::FSUB, MVT::f32 , { 1, 3, 1, 1 } },
1300 {
ISD::FSUB, MVT::v2f64, { 1, 3, 1, 1 } },
1301 {
ISD::FSUB, MVT::v4f32, { 1, 3, 1, 1 } },
1303 {
ISD::FMUL, MVT::f64, { 1, 5, 1, 1 } },
1304 {
ISD::FMUL, MVT::f32, { 1, 5, 1, 1 } },
1305 {
ISD::FMUL, MVT::v2f64, { 1, 5, 1, 1 } },
1306 {
ISD::FMUL, MVT::v4f32, { 1, 5, 1, 1 } },
1308 {
ISD::FDIV, MVT::f32, { 14, 14, 1, 1 } },
1309 {
ISD::FDIV, MVT::v4f32, { 14, 14, 1, 1 } },
1310 {
ISD::FDIV, MVT::f64, { 22, 22, 1, 1 } },
1311 {
ISD::FDIV, MVT::v2f64, { 22, 22, 1, 1 } },
1313 {
ISD::MUL, MVT::v2i64, { 6, 10,10,10 } }
1317 if (
const auto *Entry =
CostTableLookup(SSE42CostTable, ISD, LT.second))
1318 if (
auto KindCost = Entry->Cost[
CostKind])
1319 return LT.first * *KindCost;
1322 {
ISD::SHL, MVT::v16i8, { 15, 24,17,22 } },
1323 {
ISD::SHL, MVT::v8i16, { 11, 14,11,11 } },
1324 {
ISD::SHL, MVT::v4i32, { 14, 20, 4,10 } },
1326 {
ISD::SRL, MVT::v16i8, { 16, 27,18,24 } },
1327 {
ISD::SRL, MVT::v8i16, { 22, 26,23,27 } },
1328 {
ISD::SRL, MVT::v4i32, { 16, 17,15,19 } },
1329 {
ISD::SRL, MVT::v2i64, { 4, 6, 5, 7 } },
1331 {
ISD::SRA, MVT::v16i8, { 38, 41,30,36 } },
1332 {
ISD::SRA, MVT::v8i16, { 22, 26,23,27 } },
1333 {
ISD::SRA, MVT::v4i32, { 16, 17,15,19 } },
1334 {
ISD::SRA, MVT::v2i64, { 8, 17, 5, 7 } },
1336 {
ISD::MUL, MVT::v4i32, { 2, 11, 1, 1 } }
1340 if (
const auto *Entry =
CostTableLookup(SSE41CostTable, ISD, LT.second))
1341 if (
auto KindCost = Entry->Cost[
CostKind])
1342 return LT.first * *KindCost;
1345 {
ISD::MUL, MVT::v16i8, { 5, 18,10,12 } },
1349 if (
const auto *Entry =
CostTableLookup(SSSE3CostTable, ISD, LT.second))
1350 if (
auto KindCost = Entry->Cost[
CostKind])
1351 return LT.first * *KindCost;
1356 {
ISD::SHL, MVT::v16i8, { 13, 21,26,28 } },
1357 {
ISD::SHL, MVT::v8i16, { 24, 27,16,20 } },
1358 {
ISD::SHL, MVT::v4i32, { 17, 19,10,12 } },
1359 {
ISD::SHL, MVT::v2i64, { 4, 6, 5, 7 } },
1361 {
ISD::SRL, MVT::v16i8, { 14, 28,27,30 } },
1362 {
ISD::SRL, MVT::v8i16, { 16, 19,31,31 } },
1363 {
ISD::SRL, MVT::v4i32, { 12, 12,15,19 } },
1364 {
ISD::SRL, MVT::v2i64, { 4, 6, 5, 7 } },
1366 {
ISD::SRA, MVT::v16i8, { 27, 30,54,54 } },
1367 {
ISD::SRA, MVT::v8i16, { 16, 19,31,31 } },
1368 {
ISD::SRA, MVT::v4i32, { 12, 12,15,19 } },
1369 {
ISD::SRA, MVT::v2i64, { 8, 11,12,16 } },
1371 {
ISD::AND, MVT::v16i8, { 1, 1, 1, 1 } },
1372 {
ISD::AND, MVT::v8i16, { 1, 1, 1, 1 } },
1373 {
ISD::AND, MVT::v4i32, { 1, 1, 1, 1 } },
1374 {
ISD::AND, MVT::v2i64, { 1, 1, 1, 1 } },
1376 {
ISD::OR, MVT::v16i8, { 1, 1, 1, 1 } },
1377 {
ISD::OR, MVT::v8i16, { 1, 1, 1, 1 } },
1378 {
ISD::OR, MVT::v4i32, { 1, 1, 1, 1 } },
1379 {
ISD::OR, MVT::v2i64, { 1, 1, 1, 1 } },
1381 {
ISD::XOR, MVT::v16i8, { 1, 1, 1, 1 } },
1382 {
ISD::XOR, MVT::v8i16, { 1, 1, 1, 1 } },
1383 {
ISD::XOR, MVT::v4i32, { 1, 1, 1, 1 } },
1384 {
ISD::XOR, MVT::v2i64, { 1, 1, 1, 1 } },
1386 {
ISD::ADD, MVT::v2i64, { 1, 2, 1, 2 } },
1387 {
ISD::SUB, MVT::v2i64, { 1, 2, 1, 2 } },
1389 {
ISD::MUL, MVT::v16i8, { 6, 18,12,12 } },
1390 {
ISD::MUL, MVT::v8i16, { 1, 5, 1, 1 } },
1391 {
ISD::MUL, MVT::v4i32, { 6, 8, 7, 7 } },
1392 {
ISD::MUL, MVT::v2i64, { 7, 10,10,10 } },
1396 {
ISD::FDIV, MVT::f32, { 23, 23, 1, 1 } },
1397 {
ISD::FDIV, MVT::v4f32, { 39, 39, 1, 1 } },
1398 {
ISD::FDIV, MVT::f64, { 38, 38, 1, 1 } },
1399 {
ISD::FDIV, MVT::v2f64, { 69, 69, 1, 1 } },
1401 {
ISD::FNEG, MVT::f32, { 1, 1, 1, 1 } },
1402 {
ISD::FNEG, MVT::f64, { 1, 1, 1, 1 } },
1403 {
ISD::FNEG, MVT::v4f32, { 1, 1, 1, 1 } },
1404 {
ISD::FNEG, MVT::v2f64, { 1, 1, 1, 1 } },
1406 {
ISD::FADD, MVT::f32, { 2, 3, 1, 1 } },
1407 {
ISD::FADD, MVT::f64, { 2, 3, 1, 1 } },
1408 {
ISD::FADD, MVT::v2f64, { 2, 3, 1, 1 } },
1410 {
ISD::FSUB, MVT::f32, { 2, 3, 1, 1 } },
1411 {
ISD::FSUB, MVT::f64, { 2, 3, 1, 1 } },
1412 {
ISD::FSUB, MVT::v2f64, { 2, 3, 1, 1 } },
1414 {
ISD::FMUL, MVT::f64, { 2, 5, 1, 1 } },
1415 {
ISD::FMUL, MVT::v2f64, { 2, 5, 1, 1 } },
1419 if (
const auto *Entry =
CostTableLookup(SSE2CostTable, ISD, LT.second))
1420 if (
auto KindCost = Entry->Cost[
CostKind])
1421 return LT.first * *KindCost;
1424 {
ISD::FDIV, MVT::f32, { 17, 18, 1, 1 } },
1425 {
ISD::FDIV, MVT::v4f32, { 34, 48, 1, 1 } },
1427 {
ISD::FNEG, MVT::f32, { 2, 2, 1, 2 } },
1428 {
ISD::FNEG, MVT::v4f32, { 2, 2, 1, 2 } },
1430 {
ISD::FADD, MVT::f32, { 1, 3, 1, 1 } },
1431 {
ISD::FADD, MVT::v4f32, { 2, 3, 1, 1 } },
1433 {
ISD::FSUB, MVT::f32, { 1, 3, 1, 1 } },
1434 {
ISD::FSUB, MVT::v4f32, { 2, 3, 1, 1 } },
1436 {
ISD::FMUL, MVT::f32, { 2, 5, 1, 1 } },
1437 {
ISD::FMUL, MVT::v4f32, { 2, 5, 1, 1 } },
1441 if (
const auto *Entry =
CostTableLookup(SSE1CostTable, ISD, LT.second))
1442 if (
auto KindCost = Entry->Cost[
CostKind])
1443 return LT.first * *KindCost;
1448 {
ISD::MUL, MVT::i64, { 2, 6, 1, 2 } },
1453 if (
auto KindCost = Entry->Cost[
CostKind])
1454 return LT.first * *KindCost;
1465 {
ISD::MUL, MVT::i8, { 3, 4, 1, 1 } },
1466 {
ISD::MUL, MVT::i16, { 2, 4, 1, 1 } },
1467 {
ISD::MUL, MVT::i32, { 1, 4, 1, 1 } },
1469 {
ISD::FNEG, MVT::f64, { 2, 2, 1, 3 } },
1470 {
ISD::FADD, MVT::f64, { 2, 3, 1, 1 } },
1471 {
ISD::FSUB, MVT::f64, { 2, 3, 1, 1 } },
1472 {
ISD::FMUL, MVT::f64, { 2, 5, 1, 1 } },
1473 {
ISD::FDIV, MVT::f64, { 38, 38, 1, 1 } },
1477 if (
auto KindCost = Entry->Cost[
CostKind])
1478 return LT.first * *KindCost;
1492 return 20 * LT.first * LT.second.getVectorNumElements() * ScalarCost;
1536 if (!Args.empty() &&
1537 all_of(Args, [](
const Value *Arg) {
return isa<Constant>(Arg); }))
1546 CostKind, Mask.size() / 2, BaseTp);
1559 using namespace PatternMatch;
1562 (ST->
hasAVX() && LT.second.getScalarSizeInBits() >= 32)))
1568 bool IsInLaneShuffle =
false;
1574 unsigned NumEltsPerLane = Mask.size() / NumLanes;
1575 if ((Mask.size() % NumLanes) == 0)
1578 ((
P.value() % Mask.size()) / NumEltsPerLane) ==
1579 (
P.index() / NumEltsPerLane);
1584 if (LT.second.isVector() && LT.second.getScalarType() == MVT::bf16)
1585 LT.second = LT.second.changeVectorElementType(MVT::f16);
1590 int NumElts = LT.second.getVectorNumElements();
1591 if ((Index % NumElts) == 0)
1594 if (SubLT.second.isVector()) {
1595 int NumSubElts = SubLT.second.getVectorNumElements();
1596 if ((Index % NumSubElts) == 0 && (NumElts % NumSubElts) == 0)
1604 int OrigSubElts = cast<FixedVectorType>(SubTp)->getNumElements();
1605 if (NumSubElts > OrigSubElts && (Index % OrigSubElts) == 0 &&
1606 (NumSubElts % OrigSubElts) == 0 &&
1607 LT.second.getVectorElementType() ==
1608 SubLT.second.getVectorElementType() &&
1609 LT.second.getVectorElementType().getSizeInBits() ==
1611 assert(NumElts >= NumSubElts && NumElts > OrigSubElts &&
1612 "Unexpected number of elements!");
1614 LT.second.getVectorNumElements());
1616 SubLT.second.getVectorNumElements());
1617 int ExtractIndex =
alignDown((Index % NumElts), NumSubElts);
1624 return ExtractCost + 1;
1627 "Unexpected vector size");
1629 return ExtractCost + 2;
1642 int NumElts = LT.second.getVectorNumElements();
1644 if (SubLT.second.isVector()) {
1645 int NumSubElts = SubLT.second.getVectorNumElements();
1646 bool MatchingTypes =
1647 NumElts == NumSubElts &&
1649 if ((Index % NumSubElts) == 0 && (NumElts % NumSubElts) == 0)
1662 static const CostTblEntry SSE2SubVectorShuffleTbl[] = {
1693 if (
const auto *Entry =
1703 MVT LegalVT = LT.second;
1708 cast<FixedVectorType>(BaseTp)->getNumElements()) {
1712 unsigned NumOfSrcs = (VecTySize + LegalVTSize - 1) / LegalVTSize;
1719 if (!Mask.empty() && NumOfDests.
isValid()) {
1737 unsigned E = *NumOfDests.
getValue();
1738 unsigned NormalizedVF =
1744 unsigned PrevSrcReg = 0;
1748 NormalizedMask, NumOfSrcRegs, NumOfDestRegs, NumOfDestRegs, []() {},
1749 [
this, SingleOpTy,
CostKind, &PrevSrcReg, &PrevRegMask,
1754 if (PrevRegMask.
empty() || PrevSrcReg != SrcReg ||
1755 PrevRegMask != RegMask)
1763 if (SrcReg != DestReg &&
1768 PrevSrcReg = SrcReg;
1769 PrevRegMask = RegMask;
1801 if (
const auto *Entry =
1803 return LT.first * Entry->Cost;
1836 if (
const auto *Entry =
1838 return LT.first * Entry->Cost;
1915 if (
const auto *Entry =
CostTableLookup(AVX512ShuffleTbl, Kind, LT.second))
1916 if (
auto KindCost = Entry->Cost[
CostKind])
1917 return LT.first * *KindCost;
1933 if (IsInLaneShuffle && ST->
hasAVX2())
1934 if (
const auto *Entry =
1936 return LT.first * Entry->Cost;
1989 if (
const auto *Entry =
CostTableLookup(AVX2ShuffleTbl, Kind, LT.second))
1990 return LT.first * Entry->Cost;
2011 if (
const auto *Entry =
CostTableLookup(XOPShuffleTbl, Kind, LT.second))
2012 return LT.first * Entry->Cost;
2039 if (IsInLaneShuffle && ST->
hasAVX())
2040 if (
const auto *Entry =
2042 return LT.first * Entry->Cost;
2104 if (
const auto *Entry =
CostTableLookup(AVX1ShuffleTbl, Kind, LT.second))
2105 return LT.first * Entry->Cost;
2118 if (
const auto *Entry =
CostTableLookup(SSE41ShuffleTbl, Kind, LT.second))
2119 return LT.first * Entry->Cost;
2150 if (
const auto *Entry =
CostTableLookup(SSSE3ShuffleTbl, Kind, LT.second))
2151 return LT.first * Entry->Cost;
2207 llvm::any_of(Args, [](
const auto &V) {
return isa<LoadInst>(V); });
2209 if (
const auto *Entry =
2212 LT.second.getVectorElementCount()) &&
2213 "Table entry missing from isLegalBroadcastLoad()");
2214 return LT.first * Entry->Cost;
2217 if (
const auto *Entry =
CostTableLookup(SSE2ShuffleTbl, Kind, LT.second))
2218 return LT.first * Entry->Cost;
2231 if (
const auto *Entry =
CostTableLookup(SSE1ShuffleTbl, Kind, LT.second))
2232 return LT.first * Entry->Cost;
2243 assert(ISD &&
"Invalid opcode");
2370 {
ISD::FP_ROUND, MVT::v16f16, MVT::v16f32, { 1, 1, 1, 1 } },
2392 {
ISD::TRUNCATE, MVT::v16i16, MVT::v16i32, { 2, 1, 1, 1 } },
2393 {
ISD::TRUNCATE, MVT::v32i16, MVT::v16i32, { 2, 1, 1, 1 } },
2740 {
ISD::TRUNCATE, MVT::v16i16, MVT::v16i32, { 4, 1, 1, 1 } },
2817 {
ISD::TRUNCATE, MVT::v16i16, MVT::v16i32, { 6, 1, 1, 1 } },
3041 {
ISD::TRUNCATE, MVT::v16i16, MVT::v16i32, {10, 1, 1, 1 } },
3070 AVX512BWConversionTbl, ISD, SimpleDstTy, SimpleSrcTy))
3071 if (
auto KindCost = Entry->Cost[
CostKind])
3076 AVX512DQConversionTbl, ISD, SimpleDstTy, SimpleSrcTy))
3077 if (
auto KindCost = Entry->Cost[
CostKind])
3082 AVX512FConversionTbl, ISD, SimpleDstTy, SimpleSrcTy))
3083 if (
auto KindCost = Entry->Cost[
CostKind])
3089 AVX512BWVLConversionTbl, ISD, SimpleDstTy, SimpleSrcTy))
3090 if (
auto KindCost = Entry->Cost[
CostKind])
3095 AVX512DQVLConversionTbl, ISD, SimpleDstTy, SimpleSrcTy))
3096 if (
auto KindCost = Entry->Cost[
CostKind])
3101 SimpleDstTy, SimpleSrcTy))
3102 if (
auto KindCost = Entry->Cost[
CostKind])
3107 SimpleDstTy, SimpleSrcTy))
3108 if (
auto KindCost = Entry->Cost[
CostKind])
3114 SimpleDstTy, SimpleSrcTy))
3115 if (
auto KindCost = Entry->Cost[
CostKind])
3119 if (ST->hasF16C()) {
3121 SimpleDstTy, SimpleSrcTy))
3122 if (
auto KindCost = Entry->Cost[
CostKind])
3128 SimpleDstTy, SimpleSrcTy))
3129 if (
auto KindCost = Entry->Cost[
CostKind])
3135 SimpleDstTy, SimpleSrcTy))
3136 if (
auto KindCost = Entry->Cost[
CostKind])
3159 AVX512BWConversionTbl, ISD, LTDest.second, LTSrc.second))
3160 if (
auto KindCost = Entry->Cost[
CostKind])
3161 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3165 AVX512DQConversionTbl, ISD, LTDest.second, LTSrc.second))
3166 if (
auto KindCost = Entry->Cost[
CostKind])
3167 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3171 AVX512FConversionTbl, ISD, LTDest.second, LTSrc.second))
3172 if (
auto KindCost = Entry->Cost[
CostKind])
3173 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3178 LTDest.second, LTSrc.second))
3179 if (
auto KindCost = Entry->Cost[
CostKind])
3180 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3184 LTDest.second, LTSrc.second))
3185 if (
auto KindCost = Entry->Cost[
CostKind])
3186 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3190 LTDest.second, LTSrc.second))
3191 if (
auto KindCost = Entry->Cost[
CostKind])
3192 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3196 LTDest.second, LTSrc.second))
3197 if (
auto KindCost = Entry->Cost[
CostKind])
3198 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3202 LTDest.second, LTSrc.second))
3203 if (
auto KindCost = Entry->Cost[
CostKind])
3204 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3206 if (ST->hasF16C()) {
3208 LTDest.second, LTSrc.second))
3209 if (
auto KindCost = Entry->Cost[
CostKind])
3210 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3215 LTDest.second, LTSrc.second))
3216 if (
auto KindCost = Entry->Cost[
CostKind])
3217 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3221 LTDest.second, LTSrc.second))
3222 if (
auto KindCost = Entry->Cost[
CostKind])
3223 return std::max(LTSrc.first, LTDest.first) * *KindCost;
3228 1 < Src->getScalarSizeInBits() && Src->getScalarSizeInBits() < 32) {
3229 Type *ExtSrc = Src->getWithNewBitWidth(32);
3235 if (!(Src->isIntegerTy() &&
I && isa<LoadInst>(
I->getOperand(0))))
3245 1 < Dst->getScalarSizeInBits() && Dst->getScalarSizeInBits() < 32) {
3246 Type *TruncDst = Dst->getWithNewBitWidth(32);
3256 return Cost == 0 ? 0 :
N;
3270 Op1Info, Op2Info,
I);
3275 MVT MTy = LT.second;
3278 assert(ISD &&
"Invalid opcode");
3281 if (Opcode == Instruction::ICmp || Opcode == Instruction::FCmp) {
3294 Pred = cast<CmpInst>(
I)->getPredicate();
3296 bool CmpWithConstant =
false;
3297 if (
auto *CmpInstr = dyn_cast_or_null<CmpInst>(
I))
3298 CmpWithConstant = isa<Constant>(CmpInstr->getOperand(1));
3303 ExtraCost = CmpWithConstant ? 0 : 1;
3308 ExtraCost = CmpWithConstant ? 0 : 1;
3314 ExtraCost = CmpWithConstant ? 1 : 2;
3325 ExtraCost = CmpWithConstant ? 2 : 3;
3332 if (CondTy && !ST->
hasAVX())
3503 if (ST->useSLMArithCosts())
3505 if (
auto KindCost = Entry->Cost[
CostKind])
3506 return LT.first * (ExtraCost + *KindCost);
3510 if (
auto KindCost = Entry->Cost[
CostKind])
3511 return LT.first * (ExtraCost + *KindCost);
3515 if (
auto KindCost = Entry->Cost[
CostKind])
3516 return LT.first * (ExtraCost + *KindCost);
3520 if (
auto KindCost = Entry->Cost[
CostKind])
3521 return LT.first * (ExtraCost + *KindCost);
3525 if (
auto KindCost = Entry->Cost[
CostKind])
3526 return LT.first * (ExtraCost + *KindCost);
3530 if (
auto KindCost = Entry->Cost[
CostKind])
3531 return LT.first * (ExtraCost + *KindCost);
3535 if (
auto KindCost = Entry->Cost[
CostKind])
3536 return LT.first * (ExtraCost + *KindCost);
3540 if (
auto KindCost = Entry->Cost[
CostKind])
3541 return LT.first * (ExtraCost + *KindCost);
3545 if (
auto KindCost = Entry->Cost[
CostKind])
3546 return LT.first * (ExtraCost + *KindCost);
3550 if (
auto KindCost = Entry->Cost[
CostKind])
3551 return LT.first * (ExtraCost + *KindCost);
3559 Op1Info, Op2Info,
I);
3577 {
ISD::FSHL, MVT::v8i64, { 1, 1, 1, 1 } },
3578 {
ISD::FSHL, MVT::v4i64, { 1, 1, 1, 1 } },
3579 {
ISD::FSHL, MVT::v2i64, { 1, 1, 1, 1 } },
3580 {
ISD::FSHL, MVT::v16i32, { 1, 1, 1, 1 } },
3581 {
ISD::FSHL, MVT::v8i32, { 1, 1, 1, 1 } },
3582 {
ISD::FSHL, MVT::v4i32, { 1, 1, 1, 1 } },
3583 {
ISD::FSHL, MVT::v32i16, { 1, 1, 1, 1 } },
3584 {
ISD::FSHL, MVT::v16i16, { 1, 1, 1, 1 } },
3585 {
ISD::FSHL, MVT::v8i16, { 1, 1, 1, 1 } },
3586 {
ISD::ROTL, MVT::v32i16, { 1, 1, 1, 1 } },
3587 {
ISD::ROTL, MVT::v16i16, { 1, 1, 1, 1 } },
3588 {
ISD::ROTL, MVT::v8i16, { 1, 1, 1, 1 } },
3589 {
ISD::ROTR, MVT::v32i16, { 1, 1, 1, 1 } },
3590 {
ISD::ROTR, MVT::v16i16, { 1, 1, 1, 1 } },
3591 {
ISD::ROTR, MVT::v8i16, { 1, 1, 1, 1 } },
3613 {
ISD::CTLZ, MVT::v8i64, { 1, 5, 1, 1 } },
3614 {
ISD::CTLZ, MVT::v16i32, { 1, 5, 1, 1 } },
3615 {
ISD::CTLZ, MVT::v32i16, { 18, 27, 23, 27 } },
3616 {
ISD::CTLZ, MVT::v64i8, { 3, 16, 9, 11 } },
3617 {
ISD::CTLZ, MVT::v4i64, { 1, 5, 1, 1 } },
3618 {
ISD::CTLZ, MVT::v8i32, { 1, 5, 1, 1 } },
3619 {
ISD::CTLZ, MVT::v16i16, { 8, 19, 11, 13 } },
3620 {
ISD::CTLZ, MVT::v32i8, { 2, 11, 9, 10 } },
3621 {
ISD::CTLZ, MVT::v2i64, { 1, 5, 1, 1 } },
3622 {
ISD::CTLZ, MVT::v4i32, { 1, 5, 1, 1 } },
3623 {
ISD::CTLZ, MVT::v8i16, { 3, 15, 4, 6 } },
3624 {
ISD::CTLZ, MVT::v16i8, { 2, 10, 9, 10 } },
3626 {
ISD::CTTZ, MVT::v8i64, { 2, 8, 6, 7 } },
3627 {
ISD::CTTZ, MVT::v16i32, { 2, 8, 6, 7 } },
3628 {
ISD::CTTZ, MVT::v4i64, { 1, 8, 6, 6 } },
3629 {
ISD::CTTZ, MVT::v8i32, { 1, 8, 6, 6 } },
3630 {
ISD::CTTZ, MVT::v2i64, { 1, 8, 6, 6 } },
3631 {
ISD::CTTZ, MVT::v4i32, { 1, 8, 6, 6 } },
3634 {
ISD::ABS, MVT::v32i16, { 1, 1, 1, 1 } },
3635 {
ISD::ABS, MVT::v64i8, { 1, 1, 1, 1 } },
3657 {
ISD::CTLZ, MVT::v8i64, { 8, 22, 23, 23 } },
3658 {
ISD::CTLZ, MVT::v16i32, { 8, 23, 25, 25 } },
3659 {
ISD::CTLZ, MVT::v32i16, { 4, 15, 15, 16 } },
3660 {
ISD::CTLZ, MVT::v64i8, { 3, 12, 10, 9 } },
3661 {
ISD::CTPOP, MVT::v2i64, { 3, 7, 10, 10 } },
3662 {
ISD::CTPOP, MVT::v4i64, { 3, 7, 10, 10 } },
3663 {
ISD::CTPOP, MVT::v8i64, { 3, 8, 10, 12 } },
3664 {
ISD::CTPOP, MVT::v4i32, { 7, 11, 14, 14 } },
3665 {
ISD::CTPOP, MVT::v8i32, { 7, 11, 14, 14 } },
3666 {
ISD::CTPOP, MVT::v16i32, { 7, 12, 14, 16 } },
3667 {
ISD::CTPOP, MVT::v8i16, { 2, 7, 11, 11 } },
3668 {
ISD::CTPOP, MVT::v16i16, { 2, 7, 11, 11 } },
3669 {
ISD::CTPOP, MVT::v32i16, { 3, 7, 11, 13 } },
3673 {
ISD::CTTZ, MVT::v8i16, { 3, 9, 14, 14 } },
3674 {
ISD::CTTZ, MVT::v16i16, { 3, 9, 14, 14 } },
3675 {
ISD::CTTZ, MVT::v32i16, { 3, 10, 14, 16 } },
3676 {
ISD::CTTZ, MVT::v16i8, { 2, 6, 11, 11 } },
3677 {
ISD::CTTZ, MVT::v32i8, { 2, 6, 11, 11 } },
3678 {
ISD::CTTZ, MVT::v64i8, { 3, 7, 11, 13 } },
3679 {
ISD::ROTL, MVT::v32i16, { 2, 8, 6, 8 } },
3680 {
ISD::ROTL, MVT::v16i16, { 2, 8, 6, 7 } },
3681 {
ISD::ROTL, MVT::v8i16, { 2, 7, 6, 7 } },
3682 {
ISD::ROTL, MVT::v64i8, { 5, 6, 11, 12 } },
3683 {
ISD::ROTL, MVT::v32i8, { 5, 15, 7, 10 } },
3684 {
ISD::ROTL, MVT::v16i8, { 5, 15, 7, 10 } },
3685 {
ISD::ROTR, MVT::v32i16, { 2, 8, 6, 8 } },
3686 {
ISD::ROTR, MVT::v16i16, { 2, 8, 6, 7 } },
3687 {
ISD::ROTR, MVT::v8i16, { 2, 7, 6, 7 } },
3688 {
ISD::ROTR, MVT::v64i8, { 5, 6, 12, 14 } },
3689 {
ISD::ROTR, MVT::v32i8, { 5, 14, 6, 9 } },
3690 {
ISD::ROTR, MVT::v16i8, { 5, 14, 6, 9 } },
3699 {
ISD::SMAX, MVT::v32i16, { 1, 1, 1, 1 } },
3700 {
ISD::SMAX, MVT::v64i8, { 1, 1, 1, 1 } },
3701 {
ISD::SMIN, MVT::v32i16, { 1, 1, 1, 1 } },
3702 {
ISD::SMIN, MVT::v64i8, { 1, 1, 1, 1 } },
3704 {
ISD::SMULO, MVT::v64i8, { 8, 21, 17, 18 } },
3706 {
ISD::UMULO, MVT::v64i8, { 8, 15, 15, 16 } },
3711 {
ISD::UMAX, MVT::v32i16, { 1, 1, 1, 1 } },
3712 {
ISD::UMAX, MVT::v64i8, { 1, 1, 1, 1 } },
3713 {
ISD::UMIN, MVT::v32i16, { 1, 1, 1, 1 } },
3714 {
ISD::UMIN, MVT::v64i8, { 1, 1, 1, 1 } },
3719 {
ISD::ABS, MVT::v8i64, { 1, 1, 1, 1 } },
3720 {
ISD::ABS, MVT::v4i64, { 1, 1, 1, 1 } },
3721 {
ISD::ABS, MVT::v2i64, { 1, 1, 1, 1 } },
3722 {
ISD::ABS, MVT::v16i32, { 1, 1, 1, 1 } },
3723 {
ISD::ABS, MVT::v8i32, { 1, 1, 1, 1 } },
3724 {
ISD::ABS, MVT::v32i16, { 2, 7, 4, 4 } },
3725 {
ISD::ABS, MVT::v16i16, { 1, 1, 1, 1 } },
3726 {
ISD::ABS, MVT::v64i8, { 2, 7, 4, 4 } },
3727 {
ISD::ABS, MVT::v32i8, { 1, 1, 1, 1 } },
3735 {
ISD::CTLZ, MVT::v8i64, { 10, 28, 32, 32 } },
3736 {
ISD::CTLZ, MVT::v16i32, { 12, 30, 38, 38 } },
3737 {
ISD::CTLZ, MVT::v32i16, { 8, 15, 29, 29 } },
3738 {
ISD::CTLZ, MVT::v64i8, { 6, 11, 19, 19 } },
3739 {
ISD::CTPOP, MVT::v8i64, { 16, 16, 19, 19 } },
3740 {
ISD::CTPOP, MVT::v16i32, { 24, 19, 27, 27 } },
3741 {
ISD::CTPOP, MVT::v32i16, { 18, 15, 22, 22 } },
3742 {
ISD::CTPOP, MVT::v64i8, { 12, 11, 16, 16 } },
3743 {
ISD::CTTZ, MVT::v8i64, { 2, 8, 6, 7 } },
3744 {
ISD::CTTZ, MVT::v16i32, { 2, 8, 6, 7 } },
3745 {
ISD::CTTZ, MVT::v32i16, { 7, 17, 27, 27 } },
3746 {
ISD::CTTZ, MVT::v64i8, { 6, 13, 21, 21 } },
3747 {
ISD::ROTL, MVT::v8i64, { 1, 1, 1, 1 } },
3748 {
ISD::ROTL, MVT::v4i64, { 1, 1, 1, 1 } },
3749 {
ISD::ROTL, MVT::v2i64, { 1, 1, 1, 1 } },
3750 {
ISD::ROTL, MVT::v16i32, { 1, 1, 1, 1 } },
3751 {
ISD::ROTL, MVT::v8i32, { 1, 1, 1, 1 } },
3752 {
ISD::ROTL, MVT::v4i32, { 1, 1, 1, 1 } },
3753 {
ISD::ROTR, MVT::v8i64, { 1, 1, 1, 1 } },
3754 {
ISD::ROTR, MVT::v4i64, { 1, 1, 1, 1 } },
3755 {
ISD::ROTR, MVT::v2i64, { 1, 1, 1, 1 } },
3756 {
ISD::ROTR, MVT::v16i32, { 1, 1, 1, 1 } },
3757 {
ISD::ROTR, MVT::v8i32, { 1, 1, 1, 1 } },
3758 {
ISD::ROTR, MVT::v4i32, { 1, 1, 1, 1 } },
3773 {
ISD::SMAX, MVT::v8i64, { 1, 3, 1, 1 } },
3774 {
ISD::SMAX, MVT::v16i32, { 1, 1, 1, 1 } },
3775 {
ISD::SMAX, MVT::v32i16, { 3, 7, 5, 5 } },
3776 {
ISD::SMAX, MVT::v64i8, { 3, 7, 5, 5 } },
3777 {
ISD::SMAX, MVT::v4i64, { 1, 3, 1, 1 } },
3778 {
ISD::SMAX, MVT::v2i64, { 1, 3, 1, 1 } },
3779 {
ISD::SMIN, MVT::v8i64, { 1, 3, 1, 1 } },
3780 {
ISD::SMIN, MVT::v16i32, { 1, 1, 1, 1 } },
3781 {
ISD::SMIN, MVT::v32i16, { 3, 7, 5, 5 } },
3782 {
ISD::SMIN, MVT::v64i8, { 3, 7, 5, 5 } },
3783 {
ISD::SMIN, MVT::v4i64, { 1, 3, 1, 1 } },
3784 {
ISD::SMIN, MVT::v2i64, { 1, 3, 1, 1 } },
3785 {
ISD::SMULO, MVT::v8i64, { 44, 44, 81, 93 } },
3786 {
ISD::SMULO, MVT::v16i32, { 5, 12, 9, 11 } },
3787 {
ISD::SMULO, MVT::v32i16, { 6, 12, 17, 17 } },
3788 {
ISD::SMULO, MVT::v64i8, { 22, 28, 42, 42 } },
3797 {
ISD::UMAX, MVT::v8i64, { 1, 3, 1, 1 } },
3798 {
ISD::UMAX, MVT::v16i32, { 1, 1, 1, 1 } },
3799 {
ISD::UMAX, MVT::v32i16, { 3, 7, 5, 5 } },
3800 {
ISD::UMAX, MVT::v64i8, { 3, 7, 5, 5 } },
3801 {
ISD::UMAX, MVT::v4i64, { 1, 3, 1, 1 } },
3802 {
ISD::UMAX, MVT::v2i64, { 1, 3, 1, 1 } },
3803 {
ISD::UMIN, MVT::v8i64, { 1, 3, 1, 1 } },
3804 {
ISD::UMIN, MVT::v16i32, { 1, 1, 1, 1 } },
3805 {
ISD::UMIN, MVT::v32i16, { 3, 7, 5, 5 } },
3806 {
ISD::UMIN, MVT::v64i8, { 3, 7, 5, 5 } },
3807 {
ISD::UMIN, MVT::v4i64, { 1, 3, 1, 1 } },
3808 {
ISD::UMIN, MVT::v2i64, { 1, 3, 1, 1 } },
3809 {
ISD::UMULO, MVT::v8i64, { 52, 52, 95, 104} },
3810 {
ISD::UMULO, MVT::v16i32, { 5, 12, 8, 10 } },
3811 {
ISD::UMULO, MVT::v32i16, { 5, 13, 16, 16 } },
3812 {
ISD::UMULO, MVT::v64i8, { 18, 24, 30, 30 } },
3839 {
ISD::FSQRT, MVT::v16f32, { 12, 20, 1, 3 } },
3842 {
ISD::FSQRT, MVT::v4f64, { 12, 18, 1, 1 } },
3843 {
ISD::FSQRT, MVT::v8f64, { 24, 32, 1, 3 } },
3859 {
ISD::ROTL, MVT::v4i64, { 4, 7, 5, 6 } },
3860 {
ISD::ROTL, MVT::v8i32, { 4, 7, 5, 6 } },
3861 {
ISD::ROTL, MVT::v16i16, { 4, 7, 5, 6 } },
3862 {
ISD::ROTL, MVT::v32i8, { 4, 7, 5, 6 } },
3863 {
ISD::ROTL, MVT::v2i64, { 1, 3, 1, 1 } },
3864 {
ISD::ROTL, MVT::v4i32, { 1, 3, 1, 1 } },
3865 {
ISD::ROTL, MVT::v8i16, { 1, 3, 1, 1 } },
3866 {
ISD::ROTL, MVT::v16i8, { 1, 3, 1, 1 } },
3867 {
ISD::ROTR, MVT::v4i64, { 4, 7, 8, 9 } },
3868 {
ISD::ROTR, MVT::v8i32, { 4, 7, 8, 9 } },
3869 {
ISD::ROTR, MVT::v16i16, { 4, 7, 8, 9 } },
3870 {
ISD::ROTR, MVT::v32i8, { 4, 7, 8, 9 } },
3871 {
ISD::ROTR, MVT::v2i64, { 1, 3, 3, 3 } },
3872 {
ISD::ROTR, MVT::v4i32, { 1, 3, 3, 3 } },
3873 {
ISD::ROTR, MVT::v8i16, { 1, 3, 3, 3 } },
3874 {
ISD::ROTR, MVT::v16i8, { 1, 3, 3, 3 } },
3885 {
ISD::ABS, MVT::v2i64, { 2, 4, 3, 5 } },
3886 {
ISD::ABS, MVT::v4i64, { 2, 4, 3, 5 } },
3887 {
ISD::ABS, MVT::v4i32, { 1, 1, 1, 1 } },
3888 {
ISD::ABS, MVT::v8i32, { 1, 1, 1, 2 } },
3889 {
ISD::ABS, MVT::v8i16, { 1, 1, 1, 1 } },
3890 {
ISD::ABS, MVT::v16i16, { 1, 1, 1, 2 } },
3891 {
ISD::ABS, MVT::v16i8, { 1, 1, 1, 1 } },
3892 {
ISD::ABS, MVT::v32i8, { 1, 1, 1, 2 } },
3907 {
ISD::CTLZ, MVT::v2i64, { 7, 18, 24, 25 } },
3908 {
ISD::CTLZ, MVT::v4i64, { 14, 18, 24, 44 } },
3909 {
ISD::CTLZ, MVT::v4i32, { 5, 16, 19, 20 } },
3910 {
ISD::CTLZ, MVT::v8i32, { 10, 16, 19, 34 } },
3911 {
ISD::CTLZ, MVT::v8i16, { 4, 13, 14, 15 } },
3912 {
ISD::CTLZ, MVT::v16i16, { 6, 14, 14, 24 } },
3913 {
ISD::CTLZ, MVT::v16i8, { 3, 12, 9, 10 } },
3914 {
ISD::CTLZ, MVT::v32i8, { 4, 12, 9, 14 } },
3915 {
ISD::CTPOP, MVT::v2i64, { 3, 9, 10, 10 } },
3916 {
ISD::CTPOP, MVT::v4i64, { 4, 9, 10, 14 } },
3917 {
ISD::CTPOP, MVT::v4i32, { 7, 12, 14, 14 } },
3918 {
ISD::CTPOP, MVT::v8i32, { 7, 12, 14, 18 } },
3919 {
ISD::CTPOP, MVT::v8i16, { 3, 7, 11, 11 } },
3920 {
ISD::CTPOP, MVT::v16i16, { 6, 8, 11, 18 } },
3923 {
ISD::CTTZ, MVT::v2i64, { 4, 11, 13, 13 } },
3924 {
ISD::CTTZ, MVT::v4i64, { 5, 11, 13, 20 } },
3925 {
ISD::CTTZ, MVT::v4i32, { 7, 14, 17, 17 } },
3926 {
ISD::CTTZ, MVT::v8i32, { 7, 15, 17, 24 } },
3927 {
ISD::CTTZ, MVT::v8i16, { 4, 9, 14, 14 } },
3928 {
ISD::CTTZ, MVT::v16i16, { 6, 9, 14, 24 } },
3929 {
ISD::CTTZ, MVT::v16i8, { 3, 7, 11, 11 } },
3930 {
ISD::CTTZ, MVT::v32i8, { 5, 7, 11, 18 } },
3937 {
ISD::SMAX, MVT::v2i64, { 2, 7, 2, 3 } },
3938 {
ISD::SMAX, MVT::v4i64, { 2, 7, 2, 3 } },
3939 {
ISD::SMAX, MVT::v8i32, { 1, 1, 1, 2 } },
3940 {
ISD::SMAX, MVT::v16i16, { 1, 1, 1, 2 } },
3941 {
ISD::SMAX, MVT::v32i8, { 1, 1, 1, 2 } },
3942 {
ISD::SMIN, MVT::v2i64, { 2, 7, 2, 3 } },
3943 {
ISD::SMIN, MVT::v4i64, { 2, 7, 2, 3 } },
3944 {
ISD::SMIN, MVT::v8i32, { 1, 1, 1, 2 } },
3945 {
ISD::SMIN, MVT::v16i16, { 1, 1, 1, 2 } },
3946 {
ISD::SMIN, MVT::v32i8, { 1, 1, 1, 2 } },
3947 {
ISD::SMULO, MVT::v4i64, { 20, 20, 33, 37 } },
3948 {
ISD::SMULO, MVT::v2i64, { 8, 8, 13, 15 } },
3949 {
ISD::SMULO, MVT::v8i32, { 8, 20, 13, 24 } },
3950 {
ISD::SMULO, MVT::v4i32, { 5, 15, 11, 12 } },
3951 {
ISD::SMULO, MVT::v16i16, { 4, 14, 8, 14 } },
3953 {
ISD::SMULO, MVT::v32i8, { 9, 15, 18, 35 } },
3954 {
ISD::SMULO, MVT::v16i8, { 6, 22, 14, 21 } },
3966 {
ISD::UMAX, MVT::v2i64, { 2, 8, 5, 6 } },
3967 {
ISD::UMAX, MVT::v4i64, { 2, 8, 5, 8 } },
3968 {
ISD::UMAX, MVT::v8i32, { 1, 1, 1, 2 } },
3969 {
ISD::UMAX, MVT::v16i16, { 1, 1, 1, 2 } },
3970 {
ISD::UMAX, MVT::v32i8, { 1, 1, 1, 2 } },
3971 {
ISD::UMIN, MVT::v2i64, { 2, 8, 5, 6 } },
3972 {
ISD::UMIN, MVT::v4i64, { 2, 8, 5, 8 } },
3973 {
ISD::UMIN, MVT::v8i32, { 1, 1, 1, 2 } },
3974 {
ISD::UMIN, MVT::v16i16, { 1, 1, 1, 2 } },
3975 {
ISD::UMIN, MVT::v32i8, { 1, 1, 1, 2 } },
3976 {
ISD::UMULO, MVT::v4i64, { 24, 24, 39, 43 } },
3977 {
ISD::UMULO, MVT::v2i64, { 10, 10, 15, 19 } },
3978 {
ISD::UMULO, MVT::v8i32, { 8, 11, 13, 23 } },
3979 {
ISD::UMULO, MVT::v4i32, { 5, 12, 11, 12 } },
3980 {
ISD::UMULO, MVT::v16i16, { 4, 6, 8, 13 } },
3982 {
ISD::UMULO, MVT::v32i8, { 9, 13, 17, 33 } },
3983 {
ISD::UMULO, MVT::v16i8, { 6, 19, 13, 20 } },
3997 {
ISD::FSQRT, MVT::v8f32, { 14, 21, 1, 3 } },
3999 {
ISD::FSQRT, MVT::v2f64, { 14, 21, 1, 1 } },
4000 {
ISD::FSQRT, MVT::v4f64, { 28, 35, 1, 3 } },
4003 {
ISD::ABS, MVT::v4i64, { 6, 8, 6, 12 } },
4004 {
ISD::ABS, MVT::v8i32, { 3, 6, 4, 5 } },
4005 {
ISD::ABS, MVT::v16i16, { 3, 6, 4, 5 } },
4006 {
ISD::ABS, MVT::v32i8, { 3, 6, 4, 5 } },
4019 {
ISD::BSWAP, MVT::v16i16, { 5, 6, 5, 10 } },
4021 {
ISD::CTLZ, MVT::v4i64, { 29, 33, 49, 58 } },
4022 {
ISD::CTLZ, MVT::v2i64, { 14, 24, 24, 28 } },
4023 {
ISD::CTLZ, MVT::v8i32, { 24, 28, 39, 48 } },
4024 {
ISD::CTLZ, MVT::v4i32, { 12, 20, 19, 23 } },
4025 {
ISD::CTLZ, MVT::v16i16, { 19, 22, 29, 38 } },
4026 {
ISD::CTLZ, MVT::v8i16, { 9, 16, 14, 18 } },
4027 {
ISD::CTLZ, MVT::v32i8, { 14, 15, 19, 28 } },
4028 {
ISD::CTLZ, MVT::v16i8, { 7, 12, 9, 13 } },
4029 {
ISD::CTPOP, MVT::v4i64, { 14, 18, 19, 28 } },
4030 {
ISD::CTPOP, MVT::v2i64, { 7, 14, 10, 14 } },
4031 {
ISD::CTPOP, MVT::v8i32, { 18, 24, 27, 36 } },
4032 {
ISD::CTPOP, MVT::v4i32, { 9, 20, 14, 18 } },
4033 {
ISD::CTPOP, MVT::v16i16, { 16, 21, 22, 31 } },
4034 {
ISD::CTPOP, MVT::v8i16, { 8, 18, 11, 15 } },
4035 {
ISD::CTPOP, MVT::v32i8, { 13, 15, 16, 25 } },
4036 {
ISD::CTPOP, MVT::v16i8, { 6, 12, 8, 12 } },
4037 {
ISD::CTTZ, MVT::v4i64, { 17, 22, 24, 33 } },
4038 {
ISD::CTTZ, MVT::v2i64, { 9, 19, 13, 17 } },
4039 {
ISD::CTTZ, MVT::v8i32, { 21, 27, 32, 41 } },
4040 {
ISD::CTTZ, MVT::v4i32, { 11, 24, 17, 21 } },
4041 {
ISD::CTTZ, MVT::v16i16, { 18, 24, 27, 36 } },
4042 {
ISD::CTTZ, MVT::v8i16, { 9, 21, 14, 18 } },
4043 {
ISD::CTTZ, MVT::v32i8, { 15, 18, 21, 30 } },
4044 {
ISD::CTTZ, MVT::v16i8, { 8, 16, 11, 15 } },
4050 {
ISD::SMAX, MVT::v4i64, { 6, 9, 6, 12 } },
4051 {
ISD::SMAX, MVT::v2i64, { 3, 7, 2, 4 } },
4052 {
ISD::SMAX, MVT::v8i32, { 4, 6, 5, 6 } },
4053 {
ISD::SMAX, MVT::v16i16, { 4, 6, 5, 6 } },
4054 {
ISD::SMAX, MVT::v32i8, { 4, 6, 5, 6 } },
4055 {
ISD::SMIN, MVT::v4i64, { 6, 9, 6, 12 } },
4056 {
ISD::SMIN, MVT::v2i64, { 3, 7, 2, 3 } },
4057 {
ISD::SMIN, MVT::v8i32, { 4, 6, 5, 6 } },
4058 {
ISD::SMIN, MVT::v16i16, { 4, 6, 5, 6 } },
4059 {
ISD::SMIN, MVT::v32i8, { 4, 6, 5, 6 } },
4060 {
ISD::SMULO, MVT::v4i64, { 20, 20, 33, 37 } },
4061 {
ISD::SMULO, MVT::v2i64, { 9, 9, 13, 17 } },
4062 {
ISD::SMULO, MVT::v8i32, { 15, 20, 24, 29 } },
4063 {
ISD::SMULO, MVT::v4i32, { 7, 15, 11, 13 } },
4064 {
ISD::SMULO, MVT::v16i16, { 8, 14, 14, 15 } },
4066 {
ISD::SMULO, MVT::v32i8, { 20, 20, 37, 39 } },
4067 {
ISD::SMULO, MVT::v16i8, { 9, 22, 18, 21 } },
4078 {
ISD::UMAX, MVT::v4i64, { 9, 10, 11, 17 } },
4079 {
ISD::UMAX, MVT::v2i64, { 4, 8, 5, 7 } },
4080 {
ISD::UMAX, MVT::v8i32, { 4, 6, 5, 6 } },
4081 {
ISD::UMAX, MVT::v16i16, { 4, 6, 5, 6 } },
4082 {
ISD::UMAX, MVT::v32i8, { 4, 6, 5, 6 } },
4083 {
ISD::UMIN, MVT::v4i64, { 9, 10, 11, 17 } },
4084 {
ISD::UMIN, MVT::v2i64, { 4, 8, 5, 7 } },
4085 {
ISD::UMIN, MVT::v8i32, { 4, 6, 5, 6 } },
4086 {
ISD::UMIN, MVT::v16i16, { 4, 6, 5, 6 } },
4087 {
ISD::UMIN, MVT::v32i8, { 4, 6, 5, 6 } },
4088 {
ISD::UMULO, MVT::v4i64, { 24, 26, 39, 45 } },
4089 {
ISD::UMULO, MVT::v2i64, { 10, 12, 15, 20 } },
4090 {
ISD::UMULO, MVT::v8i32, { 14, 15, 23, 28 } },
4091 {
ISD::UMULO, MVT::v4i32, { 7, 12, 11, 13 } },
4092 {
ISD::UMULO, MVT::v16i16, { 7, 11, 13, 14 } },
4094 {
ISD::UMULO, MVT::v32i8, { 19, 19, 35, 37 } },