Lines Matching +full:0 +full:x86
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
15 #include "X86.h"
33 #define DEBUG_TYPE "x86-domain-reassignment"
38 "disable-x86-domain-reassignment", cl::Hidden,
39 cl::desc("X86: Disable Virtual Register Reassignment."), cl::init(false));
45 return X86::GR64RegClass.hasSubClassEq(RC) ||
46 X86::GR32RegClass.hasSubClassEq(RC) ||
47 X86::GR16RegClass.hasSubClassEq(RC) ||
48 X86::GR8RegClass.hasSubClassEq(RC);
53 return X86::VK16RegClass.hasSubClassEq(RC);
69 if (X86::GR8RegClass.hasSubClassEq(SrcRC))
70 return &X86::VK8RegClass;
71 if (X86::GR16RegClass.hasSubClassEq(SrcRC))
72 return &X86::VK16RegClass;
73 if (X86::GR32RegClass.hasSubClassEq(SrcRC))
74 return &X86::VK32RegClass;
75 if (X86::GR64RegClass.hasSubClassEq(SrcRC))
76 return &X86::VK64RegClass;
103 MachineRegisterInfo *MRI) const = 0;
107 MachineRegisterInfo *MRI) const = 0;
125 return 0;
166 return 0;
186 TII->getRegClass(TII->get(DstOpcode), 0, MRI->getTargetRegisterInfo(),
193 .add(MI->getOperand(0))
203 return 0;
222 Register DstReg = MI->getOperand(0).getReg();
223 if (DstReg.isPhysical() && (X86::GR8RegClass.contains(DstReg) ||
224 X86::GR16RegClass.contains(DstReg)))
227 if (SrcReg.isPhysical() && (X86::GR8RegClass.contains(SrcReg) ||
228 X86::GR16RegClass.contains(SrcReg)))
252 return 0;
270 .add({MI->getOperand(0), MI->getOperand(SrcOpIdx)});
276 return 0;
355 dbgs() << printReg(Reg, MRI->getTargetRegisterInfo(), 0, MRI);
395 return "X86 Domain Reassignment Pass";
425 char X86DomainReassignment::ID = 0;
468 for (int i = 0; i != NumDomains; ++i) {
512 MO.setSubReg(0);
534 MemOpEnd = MemOpStart + X86::AddrNumOperands;
566 for (int OpIdx = 0; OpIdx < OpEnd; ++OpIdx) {
569 OpIdx += (X86::AddrNumOperands - 1);
623 createReplacerDstCOPY(X86::MOVZX32rm16, GET_EGPR_IF_ENABLED(X86::KMOVWkm));
624 createReplacerDstCOPY(X86::MOVZX64rm16, GET_EGPR_IF_ENABLED(X86::KMOVWkm));
626 createReplacerDstCOPY(X86::MOVZX32rr16, GET_EGPR_IF_ENABLED(X86::KMOVWkk));
627 createReplacerDstCOPY(X86::MOVZX64rr16, GET_EGPR_IF_ENABLED(X86::KMOVWkk));
630 createReplacerDstCOPY(X86::MOVZX16rm8, GET_EGPR_IF_ENABLED(X86::KMOVBkm));
631 createReplacerDstCOPY(X86::MOVZX32rm8, GET_EGPR_IF_ENABLED(X86::KMOVBkm));
632 createReplacerDstCOPY(X86::MOVZX64rm8, GET_EGPR_IF_ENABLED(X86::KMOVBkm));
634 createReplacerDstCOPY(X86::MOVZX16rr8, GET_EGPR_IF_ENABLED(X86::KMOVBkk));
635 createReplacerDstCOPY(X86::MOVZX32rr8, GET_EGPR_IF_ENABLED(X86::KMOVBkk));
636 createReplacerDstCOPY(X86::MOVZX64rr8, GET_EGPR_IF_ENABLED(X86::KMOVBkk));
643 createReplacer(X86::MOV16rm, GET_EGPR_IF_ENABLED(X86::KMOVWkm));
644 createReplacer(X86::MOV16mr, GET_EGPR_IF_ENABLED(X86::KMOVWmk));
645 createReplacer(X86::MOV16rr, GET_EGPR_IF_ENABLED(X86::KMOVWkk));
646 createReplacer(X86::SHR16ri, X86::KSHIFTRWri);
647 createReplacer(X86::SHL16ri, X86::KSHIFTLWri);
648 createReplacer(X86::NOT16r, X86::KNOTWrr);
649 createReplacer(X86::OR16rr, X86::KORWrr);
650 createReplacer(X86::AND16rr, X86::KANDWrr);
651 createReplacer(X86::XOR16rr, X86::KXORWrr);
655 createReplacer(X86::SHR16ri_ND, X86::KSHIFTRWri);
656 createReplacer(X86::SHL16ri_ND, X86::KSHIFTLWri);
657 createReplacer(X86::NOT16r_ND, X86::KNOTWrr);
658 createReplacer(X86::OR16rr_ND, X86::KORWrr);
659 createReplacer(X86::AND16rr_ND, X86::KANDWrr);
660 createReplacer(X86::XOR16rr_ND, X86::KXORWrr);
664 createReplacer(X86::MOV32rm, GET_EGPR_IF_ENABLED(X86::KMOVDkm));
665 createReplacer(X86::MOV64rm, GET_EGPR_IF_ENABLED(X86::KMOVQkm));
667 createReplacer(X86::MOV32mr, GET_EGPR_IF_ENABLED(X86::KMOVDmk));
668 createReplacer(X86::MOV64mr, GET_EGPR_IF_ENABLED(X86::KMOVQmk));
670 createReplacer(X86::MOV32rr, GET_EGPR_IF_ENABLED(X86::KMOVDkk));
671 createReplacer(X86::MOV64rr, GET_EGPR_IF_ENABLED(X86::KMOVQkk));
673 createReplacer(X86::SHR32ri, X86::KSHIFTRDri);
674 createReplacer(X86::SHR64ri, X86::KSHIFTRQri);
676 createReplacer(X86::SHL32ri, X86::KSHIFTLDri);
677 createReplacer(X86::SHL64ri, X86::KSHIFTLQri);
679 createReplacer(X86::ADD32rr, X86::KADDDrr);
680 createReplacer(X86::ADD64rr, X86::KADDQrr);
682 createReplacer(X86::NOT32r, X86::KNOTDrr);
683 createReplacer(X86::NOT64r, X86::KNOTQrr);
685 createReplacer(X86::OR32rr, X86::KORDrr);
686 createReplacer(X86::OR64rr, X86::KORQrr);
688 createReplacer(X86::AND32rr, X86::KANDDrr);
689 createReplacer(X86::AND64rr, X86::KANDQrr);
691 createReplacer(X86::ANDN32rr, X86::KANDNDrr);
692 createReplacer(X86::ANDN64rr, X86::KANDNQrr);
694 createReplacer(X86::XOR32rr, X86::KXORDrr);
695 createReplacer(X86::XOR64rr, X86::KXORQrr);
698 createReplacer(X86::SHR32ri_ND, X86::KSHIFTRDri);
699 createReplacer(X86::SHL32ri_ND, X86::KSHIFTLDri);
700 createReplacer(X86::ADD32rr_ND, X86::KADDDrr);
701 createReplacer(X86::NOT32r_ND, X86::KNOTDrr);
702 createReplacer(X86::OR32rr_ND, X86::KORDrr);
703 createReplacer(X86::AND32rr_ND, X86::KANDDrr);
704 createReplacer(X86::XOR32rr_ND, X86::KXORDrr);
705 createReplacer(X86::SHR64ri_ND, X86::KSHIFTRQri);
706 createReplacer(X86::SHL64ri_ND, X86::KSHIFTLQri);
707 createReplacer(X86::ADD64rr_ND, X86::KADDQrr);
708 createReplacer(X86::NOT64r_ND, X86::KNOTQrr);
709 createReplacer(X86::OR64rr_ND, X86::KORQrr);
710 createReplacer(X86::AND64rr_ND, X86::KANDQrr);
711 createReplacer(X86::XOR64rr_ND, X86::KXORQrr);
716 // createReplacer(X86::TEST32rr, X86::KTESTDrr);
717 // createReplacer(X86::TEST64rr, X86::KTESTQrr);
721 createReplacer(X86::ADD8rr, X86::KADDBrr);
722 createReplacer(X86::ADD16rr, X86::KADDWrr);
724 createReplacer(X86::AND8rr, X86::KANDBrr);
726 createReplacer(X86::MOV8rm, GET_EGPR_IF_ENABLED(X86::KMOVBkm));
727 createReplacer(X86::MOV8mr, GET_EGPR_IF_ENABLED(X86::KMOVBmk));
728 createReplacer(X86::MOV8rr, GET_EGPR_IF_ENABLED(X86::KMOVBkk));
730 createReplacer(X86::NOT8r, X86::KNOTBrr);
732 createReplacer(X86::OR8rr, X86::KORBrr);
734 createReplacer(X86::SHR8ri, X86::KSHIFTRBri);
735 createReplacer(X86::SHL8ri, X86::KSHIFTLBri);
739 // createReplacer(X86::TEST8rr, X86::KTESTBrr);
740 // createReplacer(X86::TEST16rr, X86::KTESTWrr);
742 createReplacer(X86::XOR8rr, X86::KXORBrr);
745 createReplacer(X86::ADD8rr_ND, X86::KADDBrr);
746 createReplacer(X86::ADD16rr_ND, X86::KADDWrr);
747 createReplacer(X86::AND8rr_ND, X86::KANDBrr);
748 createReplacer(X86::NOT8r_ND, X86::KNOTBrr);
749 createReplacer(X86::OR8rr_ND, X86::KORBrr);
750 createReplacer(X86::SHR8ri_ND, X86::KSHIFTRBri);
751 createReplacer(X86::SHL8ri_ND, X86::KSHIFTLBri);
752 createReplacer(X86::XOR8rr_ND, X86::KXORBrr);
791 unsigned ClosureID = 0;
792 for (unsigned Idx = 0; Idx < MRI->getNumVirtRegs(); ++Idx) {
832 INITIALIZE_PASS(X86DomainReassignment, "x86-domain-reassignment",
833 "X86 Domain Reassignment Pass", false, false)