Lines Matching defs:CP

142     bool joinIntervals(CoalescerPair &CP);
145 bool joinVirtRegs(CoalescerPair &CP);
148 bool joinReservedPhysReg(CoalescerPair &CP);
154 bool adjustCopiesBackFrom(const CoalescerPair &CP, MachineInstr *CopyMI);
165 bool removeCopyByCommutingDef(const CoalescerPair &CP,MachineInstr *CopyMI);
169 bool reMaterializeTrivialDef(CoalescerPair &CP, MachineInstr *CopyMI,
173 bool canJoinPhys(const CoalescerPair &CP);
183 bool eliminateUndefCopy(MachineInstr *CopyMI, const CoalescerPair &CP);
426 bool RegisterCoalescer::adjustCopiesBackFrom(const CoalescerPair &CP,
428 assert(!CP.isPartial() && "This doesn't work for partial copies.");
429 assert(!CP.isPhys() && "This doesn't work for physreg copies.");
432 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg());
434 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg());
459 if (!CP.isCoalescable(ACopyMI) || !ACopyMI->isFullCopy())
569 bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
571 assert (!CP.isPhys());
576 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg());
578 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg());
734 bool RegisterCoalescer::reMaterializeTrivialDef(CoalescerPair &CP,
738 unsigned SrcReg = CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg();
739 unsigned SrcIdx = CP.isFlipped() ? CP.getDstIdx() : CP.getSrcIdx();
740 unsigned DstReg = CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg();
741 unsigned DstIdx = CP.isFlipped() ? CP.getSrcIdx() : CP.getDstIdx();
779 unsigned NewDstIdx = TRI->composeSubRegIndices(CP.getSrcIdx(),
841 MRI->setRegClass(DstReg, CP.getNewRC());
902 const CoalescerPair &CP) {
904 LiveInterval *SrcInt = &LIS->getInterval(CP.getSrcReg());
907 LiveInterval *DstInt = &LIS->getInterval(CP.getDstReg());
912 if (CP.isFlipped())
994 bool RegisterCoalescer::canJoinPhys(const CoalescerPair &CP) {
998 if (!MRI->isReserved(CP.getDstReg())) {
1003 LiveInterval &JoinVInt = LIS->getInterval(CP.getSrcReg());
1004 if (CP.isFlipped() && JoinVInt.containsOneValue())
1021 CoalescerPair CP(*TRI);
1022 if (!CP.setRegisters(CopyMI)) {
1030 if (!CP.isPhys() && CopyMI->allDefsAreDead()) {
1038 if (!CP.isPhys() && eliminateUndefCopy(CopyMI, CP)) {
1048 if (CP.getSrcReg() == CP.getDstReg()) {
1049 LiveInterval &LI = LIS->getInterval(CP.getSrcReg());
1065 if (CP.isPhys()) {
1066 DEBUG(dbgs() << "\tConsidering merging " << PrintReg(CP.getSrcReg(), TRI)
1067 << " with " << PrintReg(CP.getDstReg(), TRI, CP.getSrcIdx())
1069 if (!canJoinPhys(CP)) {
1073 if (reMaterializeTrivialDef(CP, CopyMI, IsDefCopy))
1081 dbgs() << "\tConsidering merging to " << CP.getNewRC()->getName()
1083 if (CP.getDstIdx() && CP.getSrcIdx())
1084 dbgs() << PrintReg(CP.getDstReg()) << " in "
1085 << TRI->getSubRegIndexName(CP.getDstIdx()) << " and "
1086 << PrintReg(CP.getSrcReg()) << " in "
1087 << TRI->getSubRegIndexName(CP.getSrcIdx()) << '\n';
1089 dbgs() << PrintReg(CP.getSrcReg(), TRI) << " in "
1090 << PrintReg(CP.getDstReg(), TRI, CP.getSrcIdx()) << '\n';
1094 if (!CP.isPartial() && LIS->getInterval(CP.getSrcReg()).ranges.size() >
1095 LIS->getInterval(CP.getDstReg()).ranges.size())
1096 CP.flip();
1103 if (!joinIntervals(CP)) {
1109 if (reMaterializeTrivialDef(CP, CopyMI, IsDefCopy))
1113 if (!CP.isPartial() && !CP.isPhys()) {
1114 if (adjustCopiesBackFrom(CP, CopyMI) ||
1115 removeCopyByCommutingDef(CP, CopyMI)) {
1131 if (CP.isCrossClass()) {
1133 MRI->setRegClass(CP.getDstReg(), CP.getNewRC());
1138 if (!CP.isPhys() && RegClassInfo.isProperSubClass(CP.getNewRC()))
1139 InflateRegs.push_back(CP.getDstReg());
1148 if (CP.getDstIdx())
1149 updateRegDefsUses(CP.getDstReg(), CP.getDstReg(), CP.getDstIdx());
1150 updateRegDefsUses(CP.getSrcReg(), CP.getDstReg(), CP.getSrcIdx());
1154 LIS->removeInterval(CP.getSrcReg());
1157 TRI->UpdateRegAllocHint(CP.getSrcReg(), CP.getDstReg(), *MF);
1160 dbgs() << "\tJoined. Result = " << PrintReg(CP.getDstReg(), TRI);
1161 if (!CP.isPhys())
1162 dbgs() << LIS->getInterval(CP.getDstReg());
1171 bool RegisterCoalescer::joinReservedPhysReg(CoalescerPair &CP) {
1172 assert(CP.isPhys() && "Must be a physreg copy");
1173 assert(MRI->isReserved(CP.getDstReg()) && "Not a reserved register");
1174 LiveInterval &RHS = LIS->getInterval(CP.getSrcReg());
1175 DEBUG(dbgs() << "\t\tRHS = " << PrintReg(CP.getSrcReg()) << ' ' << RHS
1178 assert(CP.isFlipped() && RHS.containsOneValue() &&
1182 // reserved physreg if RHS has a single value that is a copy of CP.DstReg().
1188 for (MCRegUnitIterator UI(CP.getDstReg(), TRI); UI.isValid(); ++UI)
1205 MRI->clearKillFlags(CP.getSrcReg());
1282 // Either CP.DstIdx or CP.SrcIdx.
1288 const CoalescerPair &CP;
1389 : LI(li), SubIdx(subIdx), NewVNInfo(newVNInfo), CP(cp), LIS(lis),
1588 if (CP.isCoalescable(DefMI)) {
1605 if (DefMI->isFullCopy() && !CP.isPartial() &&
1950 Reg != CP.getSrcReg() && Reg != CP.getDstReg())
1965 bool RegisterCoalescer::joinVirtRegs(CoalescerPair &CP) {
1967 LiveInterval &RHS = LIS->getInterval(CP.getSrcReg());
1968 LiveInterval &LHS = LIS->getInterval(CP.getDstReg());
1969 JoinVals RHSVals(RHS, CP.getSrcIdx(), NewVNInfo, CP, LIS, TRI);
1970 JoinVals LHSVals(LHS, CP.getDstIdx(), NewVNInfo, CP, LIS, TRI);
1972 DEBUG(dbgs() << "\t\tRHS = " << PrintReg(CP.getSrcReg()) << ' ' << RHS
1973 << "\n\t\tLHS = " << PrintReg(CP.getDstReg()) << ' ' << LHS
2026 bool RegisterCoalescer::joinIntervals(CoalescerPair &CP) {
2027 return CP.isPhys() ? joinReservedPhysReg(CP) : joinVirtRegs(CP);