Lines Matching +full:0 +full:x86

3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
18 #include "X86.h"
27 #define DEBUG_TYPE "x86-fixup-vector-constants"
39 return "X86 Fixup Vector Constants";
59 char X86FixupVectorConstantsPass::ID = 0;
100 assert((NumBits % Bits->getBitWidth()) == 0 && "Illegal splat");
106 for (unsigned I = 0, E = CV->getNumOperands(); I != E; ++I) {
127 for (unsigned I = 0, E = CDS->getNumElements(); I != E; ++I) {
153 assert((Ty->getPrimitiveSizeInBits() % SplatBitWidth) == 0 &&
166 if ((SplatBitWidth % NumEltsBits) == 0) {
170 for (unsigned Idx = 0; Idx != NumOps; ++Idx) {
185 for (unsigned I = 0; I != NumScaleOps; ++I) {
209 for (unsigned I = 0; I != BitWidth; I += 8)
216 for (unsigned I = 0; I != BitWidth; I += 16)
225 for (unsigned I = 0; I != BitWidth; I += 32)
235 for (unsigned I = 0; I != BitWidth; I += 64)
279 if (ScalarBitWidth > NumSclBits && (ScalarBitWidth % NumSclBits) == 0)
296 assert((NumBits % NumElts) == 0 && (NumBits % SrcEltBitWidth) == 0 &&
297 (DstEltBitWidth % SrcEltBitWidth) == 0 &&
302 (Bits->getBitWidth() % DstEltBitWidth) == 0 &&
307 for (unsigned I = 0; I != NumElts; ++I) {
359 assert(MI.getNumOperands() >= (OperandNo + X86::AddrNumOperands) &&
361 if (auto *C = X86::getConstantFromPool(MI, OperandNo)) {
373 MI.getOperand(OperandNo + X86::AddrDisp).setIndex(NewCPI);
393 case X86::MOVAPDrm:
394 case X86::MOVAPSrm:
395 case X86::MOVUPDrm:
396 case X86::MOVUPSrm:
398 return FixupConstant({{X86::MOVSSrm, 1, 32, rebuildZeroUpperCst},
399 {X86::MOVSDrm, 1, 64, rebuildZeroUpperCst}},
401 case X86::VMOVAPDrm:
402 case X86::VMOVAPSrm:
403 case X86::VMOVUPDrm:
404 case X86::VMOVUPSrm:
405 return FixupConstant({{X86::VMOVSSrm, 1, 32, rebuildZeroUpperCst},
406 {X86::VBROADCASTSSrm, 1, 32, rebuildSplatCst},
407 {X86::VMOVSDrm, 1, 64, rebuildZeroUpperCst},
408 {X86::VMOVDDUPrm, 1, 64, rebuildSplatCst}},
410 case X86::VMOVAPDYrm:
411 case X86::VMOVAPSYrm:
412 case X86::VMOVUPDYrm:
413 case X86::VMOVUPSYrm:
414 return FixupConstant({{X86::VBROADCASTSSYrm, 1, 32, rebuildSplatCst},
415 {X86::VBROADCASTSDYrm, 1, 64, rebuildSplatCst},
416 {X86::VBROADCASTF128rm, 1, 128, rebuildSplatCst}},
418 case X86::VMOVAPDZ128rm:
419 case X86::VMOVAPSZ128rm:
420 case X86::VMOVUPDZ128rm:
421 case X86::VMOVUPSZ128rm:
422 return FixupConstant({{X86::VMOVSSZrm, 1, 32, rebuildZeroUpperCst},
423 {X86::VBROADCASTSSZ128rm, 1, 32, rebuildSplatCst},
424 {X86::VMOVSDZrm, 1, 64, rebuildZeroUpperCst},
425 {X86::VMOVDDUPZ128rm, 1, 64, rebuildSplatCst}},
427 case X86::VMOVAPDZ256rm:
428 case X86::VMOVAPSZ256rm:
429 case X86::VMOVUPDZ256rm:
430 case X86::VMOVUPSZ256rm:
432 {{X86::VBROADCASTSSZ256rm, 1, 32, rebuildSplatCst},
433 {X86::VBROADCASTSDZ256rm, 1, 64, rebuildSplatCst},
434 {X86::VBROADCASTF32X4Z256rm, 1, 128, rebuildSplatCst}},
436 case X86::VMOVAPDZrm:
437 case X86::VMOVAPSZrm:
438 case X86::VMOVUPDZrm:
439 case X86::VMOVUPSZrm:
440 return FixupConstant({{X86::VBROADCASTSSZrm, 1, 32, rebuildSplatCst},
441 {X86::VBROADCASTSDZrm, 1, 64, rebuildSplatCst},
442 {X86::VBROADCASTF32X4rm, 1, 128, rebuildSplatCst},
443 {X86::VBROADCASTF64X4rm, 1, 256, rebuildSplatCst}},
446 case X86::MOVDQArm:
447 case X86::MOVDQUrm: {
449 {HasSSE41 ? X86::PMOVSXBQrm : 0, 2, 8, rebuildSExtCst},
450 {HasSSE41 ? X86::PMOVZXBQrm : 0, 2, 8, rebuildZExtCst},
451 {X86::MOVDI2PDIrm, 1, 32, rebuildZeroUpperCst},
452 {HasSSE41 ? X86::PMOVSXBDrm : 0, 4, 8, rebuildSExtCst},
453 {HasSSE41 ? X86::PMOVZXBDrm : 0, 4, 8, rebuildZExtCst},
454 {HasSSE41 ? X86::PMOVSXWQrm : 0, 2, 16, rebuildSExtCst},
455 {HasSSE41 ? X86::PMOVZXWQrm : 0, 2, 16, rebuildZExtCst},
456 {X86::MOVQI2PQIrm, 1, 64, rebuildZeroUpperCst},
457 {HasSSE41 ? X86::PMOVSXBWrm : 0, 8, 8, rebuildSExtCst},
458 {HasSSE41 ? X86::PMOVZXBWrm : 0, 8, 8, rebuildZExtCst},
459 {HasSSE41 ? X86::PMOVSXWDrm : 0, 4, 16, rebuildSExtCst},
460 {HasSSE41 ? X86::PMOVZXWDrm : 0, 4, 16, rebuildZExtCst},
461 {HasSSE41 ? X86::PMOVSXDQrm : 0, 2, 32, rebuildSExtCst},
462 {HasSSE41 ? X86::PMOVZXDQrm : 0, 2, 32, rebuildZExtCst}};
465 case X86::VMOVDQArm:
466 case X86::VMOVDQUrm: {
468 {HasAVX2 ? X86::VPBROADCASTBrm : 0, 1, 8, rebuildSplatCst},
469 {HasAVX2 ? X86::VPBROADCASTWrm : 0, 1, 16, rebuildSplatCst},
470 {X86::VPMOVSXBQrm, 2, 8, rebuildSExtCst},
471 {X86::VPMOVZXBQrm, 2, 8, rebuildZExtCst},
472 {X86::VMOVDI2PDIrm, 1, 32, rebuildZeroUpperCst},
473 {HasAVX2 ? X86::VPBROADCASTDrm : X86::VBROADCASTSSrm, 1, 32,
475 {X86::VPMOVSXBDrm, 4, 8, rebuildSExtCst},
476 {X86::VPMOVZXBDrm, 4, 8, rebuildZExtCst},
477 {X86::VPMOVSXWQrm, 2, 16, rebuildSExtCst},
478 {X86::VPMOVZXWQrm, 2, 16, rebuildZExtCst},
479 {X86::VMOVQI2PQIrm, 1, 64, rebuildZeroUpperCst},
480 {HasAVX2 ? X86::VPBROADCASTQrm : X86::VMOVDDUPrm, 1, 64,
482 {X86::VPMOVSXBWrm, 8, 8, rebuildSExtCst},
483 {X86::VPMOVZXBWrm, 8, 8, rebuildZExtCst},
484 {X86::VPMOVSXWDrm, 4, 16, rebuildSExtCst},
485 {X86::VPMOVZXWDrm, 4, 16, rebuildZExtCst},
486 {X86::VPMOVSXDQrm, 2, 32, rebuildSExtCst},
487 {X86::VPMOVZXDQrm, 2, 32, rebuildZExtCst}};
490 case X86::VMOVDQAYrm:
491 case X86::VMOVDQUYrm: {
493 {HasAVX2 ? X86::VPBROADCASTBYrm : 0, 1, 8, rebuildSplatCst},
494 {HasAVX2 ? X86::VPBROADCASTWYrm : 0, 1, 16, rebuildSplatCst},
495 {HasAVX2 ? X86::VPBROADCASTDYrm : X86::VBROADCASTSSYrm, 1, 32,
497 {HasAVX2 ? X86::VPMOVSXBQYrm : 0, 4, 8, rebuildSExtCst},
498 {HasAVX2 ? X86::VPMOVZXBQYrm : 0, 4, 8, rebuildZExtCst},
499 {HasAVX2 ? X86::VPBROADCASTQYrm : X86::VBROADCASTSDYrm, 1, 64,
501 {HasAVX2 ? X86::VPMOVSXBDYrm : 0, 8, 8, rebuildSExtCst},
502 {HasAVX2 ? X86::VPMOVZXBDYrm : 0, 8, 8, rebuildZExtCst},
503 {HasAVX2 ? X86::VPMOVSXWQYrm : 0, 4, 16, rebuildSExtCst},
504 {HasAVX2 ? X86::VPMOVZXWQYrm : 0, 4, 16, rebuildZExtCst},
505 {HasAVX2 ? X86::VBROADCASTI128rm : X86::VBROADCASTF128rm, 1, 128,
507 {HasAVX2 ? X86::VPMOVSXBWYrm : 0, 16, 8, rebuildSExtCst},
508 {HasAVX2 ? X86::VPMOVZXBWYrm : 0, 16, 8, rebuildZExtCst},
509 {HasAVX2 ? X86::VPMOVSXWDYrm : 0, 8, 16, rebuildSExtCst},
510 {HasAVX2 ? X86::VPMOVZXWDYrm : 0, 8, 16, rebuildZExtCst},
511 {HasAVX2 ? X86::VPMOVSXDQYrm : 0, 4, 32, rebuildSExtCst},
512 {HasAVX2 ? X86::VPMOVZXDQYrm : 0, 4, 32, rebuildZExtCst}};
515 case X86::VMOVDQA32Z128rm:
516 case X86::VMOVDQA64Z128rm:
517 case X86::VMOVDQU32Z128rm:
518 case X86::VMOVDQU64Z128rm: {
520 {HasBWI ? X86::VPBROADCASTBZ128rm : 0, 1, 8, rebuildSplatCst},
521 {HasBWI ? X86::VPBROADCASTWZ128rm : 0, 1, 16, rebuildSplatCst},
522 {X86::VPMOVSXBQZ128rm, 2, 8, rebuildSExtCst},
523 {X86::VPMOVZXBQZ128rm, 2, 8, rebuildZExtCst},
524 {X86::VMOVDI2PDIZrm, 1, 32, rebuildZeroUpperCst},
525 {X86::VPBROADCASTDZ128rm, 1, 32, rebuildSplatCst},
526 {X86::VPMOVSXBDZ128rm, 4, 8, rebuildSExtCst},
527 {X86::VPMOVZXBDZ128rm, 4, 8, rebuildZExtCst},
528 {X86::VPMOVSXWQZ128rm, 2, 16, rebuildSExtCst},
529 {X86::VPMOVZXWQZ128rm, 2, 16, rebuildZExtCst},
530 {X86::VMOVQI2PQIZrm, 1, 64, rebuildZeroUpperCst},
531 {X86::VPBROADCASTQZ128rm, 1, 64, rebuildSplatCst},
532 {HasBWI ? X86::VPMOVSXBWZ128rm : 0, 8, 8, rebuildSExtCst},
533 {HasBWI ? X86::VPMOVZXBWZ128rm : 0, 8, 8, rebuildZExtCst},
534 {X86::VPMOVSXWDZ128rm, 4, 16, rebuildSExtCst},
535 {X86::VPMOVZXWDZ128rm, 4, 16, rebuildZExtCst},
536 {X86::VPMOVSXDQZ128rm, 2, 32, rebuildSExtCst},
537 {X86::VPMOVZXDQZ128rm, 2, 32, rebuildZExtCst}};
540 case X86::VMOVDQA32Z256rm:
541 case X86::VMOVDQA64Z256rm:
542 case X86::VMOVDQU32Z256rm:
543 case X86::VMOVDQU64Z256rm: {
545 {HasBWI ? X86::VPBROADCASTBZ256rm : 0, 1, 8, rebuildSplatCst},
546 {HasBWI ? X86::VPBROADCASTWZ256rm : 0, 1, 16, rebuildSplatCst},
547 {X86::VPBROADCASTDZ256rm, 1, 32, rebuildSplatCst},
548 {X86::VPMOVSXBQZ256rm, 4, 8, rebuildSExtCst},
549 {X86::VPMOVZXBQZ256rm, 4, 8, rebuildZExtCst},
550 {X86::VPBROADCASTQZ256rm, 1, 64, rebuildSplatCst},
551 {X86::VPMOVSXBDZ256rm, 8, 8, rebuildSExtCst},
552 {X86::VPMOVZXBDZ256rm, 8, 8, rebuildZExtCst},
553 {X86::VPMOVSXWQZ256rm, 4, 16, rebuildSExtCst},
554 {X86::VPMOVZXWQZ256rm, 4, 16, rebuildZExtCst},
555 {X86::VBROADCASTI32X4Z256rm, 1, 128, rebuildSplatCst},
556 {HasBWI ? X86::VPMOVSXBWZ256rm : 0, 16, 8, rebuildSExtCst},
557 {HasBWI ? X86::VPMOVZXBWZ256rm : 0, 16, 8, rebuildZExtCst},
558 {X86::VPMOVSXWDZ256rm, 8, 16, rebuildSExtCst},
559 {X86::VPMOVZXWDZ256rm, 8, 16, rebuildZExtCst},
560 {X86::VPMOVSXDQZ256rm, 4, 32, rebuildSExtCst},
561 {X86::VPMOVZXDQZ256rm, 4, 32, rebuildZExtCst}};
564 case X86::VMOVDQA32Zrm:
565 case X86::VMOVDQA64Zrm:
566 case X86::VMOVDQU32Zrm:
567 case X86::VMOVDQU64Zrm: {
569 {HasBWI ? X86::VPBROADCASTBZrm : 0, 1, 8, rebuildSplatCst},
570 {HasBWI ? X86::VPBROADCASTWZrm : 0, 1, 16, rebuildSplatCst},
571 {X86::VPBROADCASTDZrm, 1, 32, rebuildSplatCst},
572 {X86::VPBROADCASTQZrm, 1, 64, rebuildSplatCst},
573 {X86::VPMOVSXBQZrm, 8, 8, rebuildSExtCst},
574 {X86::VPMOVZXBQZrm, 8, 8, rebuildZExtCst},
575 {X86::VBROADCASTI32X4rm, 1, 128, rebuildSplatCst},
576 {X86::VPMOVSXBDZrm, 16, 8, rebuildSExtCst},
577 {X86::VPMOVZXBDZrm, 16, 8, rebuildZExtCst},
578 {X86::VPMOVSXWQZrm, 8, 16, rebuildSExtCst},
579 {X86::VPMOVZXWQZrm, 8, 16, rebuildZExtCst},
580 {X86::VBROADCASTI64X4rm, 1, 256, rebuildSplatCst},
581 {HasBWI ? X86::VPMOVSXBWZrm : 0, 32, 8, rebuildSExtCst},
582 {HasBWI ? X86::VPMOVZXBWZrm : 0, 32, 8, rebuildZExtCst},
583 {X86::VPMOVSXWDZrm, 16, 16, rebuildSExtCst},
584 {X86::VPMOVZXWDZrm, 16, 16, rebuildZExtCst},
585 {X86::VPMOVSXDQZrm, 8, 32, rebuildSExtCst},
586 {X86::VPMOVZXDQZrm, 8, 32, rebuildZExtCst}};
592 unsigned OpBcst32 = 0, OpBcst64 = 0;
593 unsigned OpNoBcst32 = 0, OpNoBcst64 = 0;
608 assert(((OpBcst32 == 0) || (OpBcst64 == 0) || (OpNoBcst32 == OpNoBcst64)) &&
612 unsigned OpNo = OpBcst32 == 0 ? OpNoBcst64 : OpNoBcst32;
617 return FixupConstant(Fixups, 0, OpNo);
630 unsigned OpSrc32 = 0, OpSrc64 = 0;
632 case X86::VANDPDrm:
633 case X86::VANDPSrm:
634 case X86::VPANDrm:
635 OpSrc32 = X86 ::VPANDDZ128rm;
636 OpSrc64 = X86 ::VPANDQZ128rm;
638 case X86::VANDPDYrm:
639 case X86::VANDPSYrm:
640 case X86::VPANDYrm:
641 OpSrc32 = X86 ::VPANDDZ256rm;
642 OpSrc64 = X86 ::VPANDQZ256rm;
644 case X86::VANDNPDrm:
645 case X86::VANDNPSrm:
646 case X86::VPANDNrm:
647 OpSrc32 = X86 ::VPANDNDZ128rm;
648 OpSrc64 = X86 ::VPANDNQZ128rm;
650 case X86::VANDNPDYrm:
651 case X86::VANDNPSYrm:
652 case X86::VPANDNYrm:
653 OpSrc32 = X86 ::VPANDNDZ256rm;
654 OpSrc64 = X86 ::VPANDNQZ256rm;
656 case X86::VORPDrm:
657 case X86::VORPSrm:
658 case X86::VPORrm:
659 OpSrc32 = X86 ::VPORDZ128rm;
660 OpSrc64 = X86 ::VPORQZ128rm;
662 case X86::VORPDYrm:
663 case X86::VORPSYrm:
664 case X86::VPORYrm:
665 OpSrc32 = X86 ::VPORDZ256rm;
666 OpSrc64 = X86 ::VPORQZ256rm;
668 case X86::VXORPDrm:
669 case X86::VXORPSrm:
670 case X86::VPXORrm:
671 OpSrc32 = X86 ::VPXORDZ128rm;
672 OpSrc64 = X86 ::VPXORQZ128rm;
674 case X86::VXORPDYrm:
675 case X86::VXORPSYrm:
676 case X86::VPXORYrm:
677 OpSrc32 = X86 ::VPXORDZ256rm;
678 OpSrc64 = X86 ::VPXORQZ256rm;