Lines Matching refs:CP

245     bool joinIntervals(CoalescerPair &CP);
248 bool joinVirtRegs(CoalescerPair &CP);
256 bool joinReservedPhysReg(CoalescerPair &CP);
264 LaneBitmask LaneMask, CoalescerPair &CP,
270 LaneBitmask LaneMask, const CoalescerPair &CP);
276 bool adjustCopiesBackFrom(const CoalescerPair &CP, MachineInstr *CopyMI);
291 std::pair<bool,bool> removeCopyByCommutingDef(const CoalescerPair &CP,
295 bool removePartialRedundancy(const CoalescerPair &CP, MachineInstr &CopyMI);
299 bool reMaterializeTrivialDef(const CoalescerPair &CP, MachineInstr *CopyMI,
303 bool canJoinPhys(const CoalescerPair &CP);
371 void checkMergingChangesDbgValues(CoalescerPair &CP, LiveRange &LHS,
615 bool RegisterCoalescer::adjustCopiesBackFrom(const CoalescerPair &CP, in adjustCopiesBackFrom() argument
617 assert(!CP.isPartial() && "This doesn't work for partial copies."); in adjustCopiesBackFrom()
618 assert(!CP.isPhys() && "This doesn't work for physreg copies."); in adjustCopiesBackFrom()
621 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg()); in adjustCopiesBackFrom()
623 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg()); in adjustCopiesBackFrom()
662 if (!CP.isCoalescable(ACopyMI) || !ACopyMI->isFullCopy()) in adjustCopiesBackFrom()
805 RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP, in removeCopyByCommutingDef() argument
807 assert(!CP.isPhys()); in removeCopyByCommutingDef()
810 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg()); in removeCopyByCommutingDef()
812 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg()); in removeCopyByCommutingDef()
1088 bool RegisterCoalescer::removePartialRedundancy(const CoalescerPair &CP, in removePartialRedundancy() argument
1090 assert(!CP.isPhys()); in removePartialRedundancy()
1104 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg()); in removePartialRedundancy()
1106 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg()); in removePartialRedundancy()
1287 bool RegisterCoalescer::reMaterializeTrivialDef(const CoalescerPair &CP, in reMaterializeTrivialDef() argument
1291 Register SrcReg = CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg(); in reMaterializeTrivialDef()
1292 unsigned SrcIdx = CP.isFlipped() ? CP.getDstIdx() : CP.getSrcIdx(); in reMaterializeTrivialDef()
1293 Register DstReg = CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg(); in reMaterializeTrivialDef()
1294 unsigned DstIdx = CP.isFlipped() ? CP.getSrcIdx() : CP.getDstIdx(); in reMaterializeTrivialDef()
1348 unsigned NewDstIdx = TRI->composeSubRegIndices(CP.getSrcIdx(), DefSubIdx); in reMaterializeTrivialDef()
1382 const TargetRegisterClass *NewRC = CP.getNewRC(); in reMaterializeTrivialDef()
1386 assert(SrcIdx == 0 && CP.isFlipped() in reMaterializeTrivialDef()
1907 bool RegisterCoalescer::canJoinPhys(const CoalescerPair &CP) { in canJoinPhys() argument
1911 if (!MRI->isReserved(CP.getDstReg())) { in canJoinPhys()
1916 LiveInterval &JoinVInt = LIS->getInterval(CP.getSrcReg()); in canJoinPhys()
1974 CoalescerPair CP(*TRI); in joinCopy() local
1975 if (!CP.setRegisters(CopyMI)) { in joinCopy()
1980 if (CP.getNewRC()) { in joinCopy()
1981 auto SrcRC = MRI->getRegClass(CP.getSrcReg()); in joinCopy()
1982 auto DstRC = MRI->getRegClass(CP.getDstReg()); in joinCopy()
1983 unsigned SrcIdx = CP.getSrcIdx(); in joinCopy()
1984 unsigned DstIdx = CP.getDstIdx(); in joinCopy()
1985 if (CP.isFlipped()) { in joinCopy()
1990 CP.getNewRC(), *LIS)) { in joinCopy()
1999 if (!CP.isPhys() && CopyMI->allDefsAreDead()) { in joinCopy()
2007 if (!CP.isPhys()) { in joinCopy()
2020 if (CP.getSrcReg() == CP.getDstReg()) { in joinCopy()
2021 LiveInterval &LI = LIS->getInterval(CP.getSrcReg()); in joinCopy()
2055 setUndefOnPrunedSubRegUses(LI, CP.getSrcReg(), PrunedLanes); in joinCopy()
2065 if (CP.isPhys()) { in joinCopy()
2067 << printReg(CP.getSrcReg(), TRI) << " with " in joinCopy()
2068 << printReg(CP.getDstReg(), TRI, CP.getSrcIdx()) << '\n'); in joinCopy()
2069 if (!canJoinPhys(CP)) { in joinCopy()
2073 if (reMaterializeTrivialDef(CP, CopyMI, IsDefCopy)) in joinCopy()
2081 if (!CP.isPartial() && LIS->getInterval(CP.getSrcReg()).size() > in joinCopy()
2082 LIS->getInterval(CP.getDstReg()).size()) in joinCopy()
2083 CP.flip(); in joinCopy()
2087 << TRI->getRegClassName(CP.getNewRC()) << " with "; in joinCopy()
2088 if (CP.getDstIdx() && CP.getSrcIdx()) in joinCopy()
2089 dbgs() << printReg(CP.getDstReg()) << " in " in joinCopy()
2090 << TRI->getSubRegIndexName(CP.getDstIdx()) << " and " in joinCopy()
2091 << printReg(CP.getSrcReg()) << " in " in joinCopy()
2092 << TRI->getSubRegIndexName(CP.getSrcIdx()) << '\n'; in joinCopy()
2094 dbgs() << printReg(CP.getSrcReg(), TRI) << " in " in joinCopy()
2095 << printReg(CP.getDstReg(), TRI, CP.getSrcIdx()) << '\n'; in joinCopy()
2106 if (!joinIntervals(CP)) { in joinCopy()
2112 if (reMaterializeTrivialDef(CP, CopyMI, IsDefCopy)) in joinCopy()
2117 if (!CP.isPartial() && !CP.isPhys()) { in joinCopy()
2118 bool Changed = adjustCopiesBackFrom(CP, CopyMI); in joinCopy()
2121 std::tie(Changed, Shrink) = removeCopyByCommutingDef(CP, CopyMI); in joinCopy()
2125 Register DstReg = CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg(); in joinCopy()
2137 if (!CP.isPartial() && !CP.isPhys()) in joinCopy()
2138 if (removePartialRedundancy(CP, *CopyMI)) in joinCopy()
2149 if (CP.isCrossClass()) { in joinCopy()
2151 MRI->setRegClass(CP.getDstReg(), CP.getNewRC()); in joinCopy()
2156 if (!CP.isPhys() && RegClassInfo.isProperSubClass(CP.getNewRC())) in joinCopy()
2157 InflateRegs.push_back(CP.getDstReg()); in joinCopy()
2168 if (CP.getDstIdx()) in joinCopy()
2169 updateRegDefsUses(CP.getDstReg(), CP.getDstReg(), CP.getDstIdx()); in joinCopy()
2170 updateRegDefsUses(CP.getSrcReg(), CP.getDstReg(), CP.getSrcIdx()); in joinCopy()
2174 LiveInterval &LI = LIS->getInterval(CP.getDstReg()); in joinCopy()
2189 if (ToBeUpdated.count(CP.getSrcReg())) in joinCopy()
2193 LiveInterval &LI = LIS->getInterval(CP.getDstReg()); in joinCopy()
2199 LIS->removeInterval(CP.getSrcReg()); in joinCopy()
2202 TRI->updateRegAllocHint(CP.getSrcReg(), CP.getDstReg(), *MF); in joinCopy()
2205 dbgs() << "\tSuccess: " << printReg(CP.getSrcReg(), TRI, CP.getSrcIdx()) in joinCopy()
2206 << " -> " << printReg(CP.getDstReg(), TRI, CP.getDstIdx()) << '\n'; in joinCopy()
2208 if (CP.isPhys()) in joinCopy()
2209 dbgs() << printReg(CP.getDstReg(), TRI); in joinCopy()
2211 dbgs() << LIS->getInterval(CP.getDstReg()); in joinCopy()
2219 bool RegisterCoalescer::joinReservedPhysReg(CoalescerPair &CP) { in joinReservedPhysReg() argument
2220 Register DstReg = CP.getDstReg(); in joinReservedPhysReg()
2221 Register SrcReg = CP.getSrcReg(); in joinReservedPhysReg()
2222 assert(CP.isPhys() && "Must be a physreg copy"); in joinReservedPhysReg()
2266 if (CP.isFlipped()) { in joinReservedPhysReg()
2330 MRI->clearKillFlags(CP.getSrcReg()); in joinReservedPhysReg()
2431 const CoalescerPair &CP; member in __anonf9586a8a0311::JoinVals
2595 NewVNInfo(newVNInfo), CP(cp), LIS(lis), Indexes(LIS->getSlotIndexes()), in JoinVals()
2909 if (CP.isCoalescable(DefMI)) { in analyzeValue()
2926 if (DefMI->isFullCopy() && !CP.isPartial() && in analyzeValue()
3499 if (Reg.isVirtual() && Reg != CP.getSrcReg() && Reg != CP.getDstReg()) in eraseInstrs()
3516 const CoalescerPair &CP) { in joinSubRegRanges() argument
3518 JoinVals RHSVals(RRange, CP.getSrcReg(), CP.getSrcIdx(), LaneMask, in joinSubRegRanges()
3519 NewVNInfo, CP, LIS, TRI, true, true); in joinSubRegRanges()
3520 JoinVals LHSVals(LRange, CP.getDstReg(), CP.getDstIdx(), LaneMask, in joinSubRegRanges()
3521 NewVNInfo, CP, LIS, TRI, true, true); in joinSubRegRanges()
3580 CoalescerPair &CP, in mergeSubRangeInto() argument
3585 [this, &Allocator, &ToMerge, &CP](LiveInterval::SubRange &SR) { in mergeSubRangeInto()
3591 joinSubRegRanges(SR, RangeCopy, SR.LaneMask, CP); in mergeSubRangeInto()
3608 bool RegisterCoalescer::joinVirtRegs(CoalescerPair &CP) { in joinVirtRegs() argument
3610 LiveInterval &RHS = LIS->getInterval(CP.getSrcReg()); in joinVirtRegs()
3611 LiveInterval &LHS = LIS->getInterval(CP.getDstReg()); in joinVirtRegs()
3612 bool TrackSubRegLiveness = MRI->shouldTrackSubRegLiveness(*CP.getNewRC()); in joinVirtRegs()
3613 JoinVals RHSVals(RHS, CP.getSrcReg(), CP.getSrcIdx(), LaneBitmask::getNone(), in joinVirtRegs()
3614 NewVNInfo, CP, LIS, TRI, false, TrackSubRegLiveness); in joinVirtRegs()
3615 JoinVals LHSVals(LHS, CP.getDstReg(), CP.getDstIdx(), LaneBitmask::getNone(), in joinVirtRegs()
3616 NewVNInfo, CP, LIS, TRI, false, TrackSubRegLiveness); in joinVirtRegs()
3638 unsigned DstIdx = CP.getDstIdx(); in joinVirtRegs()
3640 LaneBitmask Mask = DstIdx == 0 ? CP.getNewRC()->getLaneMask() in joinVirtRegs()
3652 LLVM_DEBUG(dbgs() << "\t\tLHST = " << printReg(CP.getDstReg()) << ' ' << LHS in joinVirtRegs()
3656 unsigned SrcIdx = CP.getSrcIdx(); in joinVirtRegs()
3658 LaneBitmask Mask = SrcIdx == 0 ? CP.getNewRC()->getLaneMask() in joinVirtRegs()
3660 mergeSubRangeInto(LHS, RHS, Mask, CP, DstIdx); in joinVirtRegs()
3665 mergeSubRangeInto(LHS, R, Mask, CP, DstIdx); in joinVirtRegs()
3676 } else if (TrackSubRegLiveness && !CP.getDstIdx() && CP.getSrcIdx()) { in joinVirtRegs()
3678 CP.getNewRC()->getLaneMask(), LHS); in joinVirtRegs()
3679 mergeSubRangeInto(LHS, RHS, TRI->getSubRegIndexLaneMask(CP.getSrcIdx()), CP, in joinVirtRegs()
3680 CP.getDstIdx()); in joinVirtRegs()
3702 checkMergingChangesDbgValues(CP, LHS, LHSVals, RHS, RHSVals); in joinVirtRegs()
3706 auto RegIt = RegToPHIIdx.find(CP.getSrcReg()); in joinVirtRegs()
3731 if (CP.getSrcIdx() != 0 || CP.getDstIdx() != 0) in joinVirtRegs()
3734 if (PHIIt->second.SubReg && PHIIt->second.SubReg != CP.getSrcIdx()) in joinVirtRegs()
3738 PHIIt->second.Reg = CP.getDstReg(); in joinVirtRegs()
3742 if (CP.getSrcIdx() != 0) in joinVirtRegs()
3743 PHIIt->second.SubReg = CP.getSrcIdx(); in joinVirtRegs()
3754 RegIt = RegToPHIIdx.find(CP.getDstReg()); in joinVirtRegs()
3759 RegToPHIIdx.insert({CP.getDstReg(), InstrNums}); in joinVirtRegs()
3789 bool RegisterCoalescer::joinIntervals(CoalescerPair &CP) { in joinIntervals() argument
3790 return CP.isPhys() ? joinReservedPhysReg(CP) : joinVirtRegs(CP); in joinIntervals()
3838 void RegisterCoalescer::checkMergingChangesDbgValues(CoalescerPair &CP, in checkMergingChangesDbgValues() argument
3852 ScanForSrcReg(CP.getSrcReg()); in checkMergingChangesDbgValues()
3853 ScanForDstReg(CP.getDstReg()); in checkMergingChangesDbgValues()