Lines Matching defs:CP

224     bool joinIntervals(CoalescerPair &CP);
227 bool joinVirtRegs(CoalescerPair &CP);
235 bool joinReservedPhysReg(CoalescerPair &CP);
243 LaneBitmask LaneMask, CoalescerPair &CP,
249 LaneBitmask LaneMask, const CoalescerPair &CP);
255 bool adjustCopiesBackFrom(const CoalescerPair &CP, MachineInstr *CopyMI);
270 std::pair<bool,bool> removeCopyByCommutingDef(const CoalescerPair &CP,
274 bool removePartialRedundancy(const CoalescerPair &CP, MachineInstr &CopyMI);
278 bool reMaterializeTrivialDef(const CoalescerPair &CP, MachineInstr *CopyMI,
282 bool canJoinPhys(const CoalescerPair &CP);
350 void checkMergingChangesDbgValues(CoalescerPair &CP, LiveRange &LHS,
584 bool RegisterCoalescer::adjustCopiesBackFrom(const CoalescerPair &CP,
586 assert(!CP.isPartial() && "This doesn't work for partial copies.");
587 assert(!CP.isPhys() && "This doesn't work for physreg copies.");
590 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg());
592 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg());
631 if (!CP.isCoalescable(ACopyMI) || !ACopyMI->isFullCopy())
767 RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
769 assert(!CP.isPhys());
772 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg());
774 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg());
1054 bool RegisterCoalescer::removePartialRedundancy(const CoalescerPair &CP,
1056 assert(!CP.isPhys());
1068 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg());
1070 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg());
1233 bool RegisterCoalescer::reMaterializeTrivialDef(const CoalescerPair &CP,
1237 unsigned SrcReg = CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg();
1238 unsigned SrcIdx = CP.isFlipped() ? CP.getDstIdx() : CP.getSrcIdx();
1239 unsigned DstReg = CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg();
1240 unsigned DstIdx = CP.isFlipped() ? CP.getSrcIdx() : CP.getDstIdx();
1289 unsigned NewDstIdx = TRI->composeSubRegIndices(CP.getSrcIdx(),
1319 const TargetRegisterClass *NewRC = CP.getNewRC();
1323 assert(SrcIdx == 0 && CP.isFlipped()
1768 bool RegisterCoalescer::canJoinPhys(const CoalescerPair &CP) {
1772 if (!MRI->isReserved(CP.getDstReg())) {
1777 LiveInterval &JoinVInt = LIS->getInterval(CP.getSrcReg());
1790 CoalescerPair CP(*TRI);
1791 if (!CP.setRegisters(CopyMI)) {
1796 if (CP.getNewRC()) {
1797 auto SrcRC = MRI->getRegClass(CP.getSrcReg());
1798 auto DstRC = MRI->getRegClass(CP.getDstReg());
1799 unsigned SrcIdx = CP.getSrcIdx();
1800 unsigned DstIdx = CP.getDstIdx();
1801 if (CP.isFlipped()) {
1806 CP.getNewRC(), *LIS)) {
1815 if (!CP.isPhys() && CopyMI->allDefsAreDead()) {
1823 if (!CP.isPhys()) {
1836 if (CP.getSrcReg() == CP.getDstReg()) {
1837 LiveInterval &LI = LIS->getInterval(CP.getSrcReg());
1862 if (CP.isPhys()) {
1864 << printReg(CP.getSrcReg(), TRI) << " with "
1865 << printReg(CP.getDstReg(), TRI, CP.getSrcIdx()) << '\n');
1866 if (!canJoinPhys(CP)) {
1870 if (reMaterializeTrivialDef(CP, CopyMI, IsDefCopy))
1878 if (!CP.isPartial() && LIS->getInterval(CP.getSrcReg()).size() >
1879 LIS->getInterval(CP.getDstReg()).size())
1880 CP.flip();
1884 << TRI->getRegClassName(CP.getNewRC()) << " with ";
1885 if (CP.getDstIdx() && CP.getSrcIdx())
1886 dbgs() << printReg(CP.getDstReg()) << " in "
1887 << TRI->getSubRegIndexName(CP.getDstIdx()) << " and "
1888 << printReg(CP.getSrcReg()) << " in "
1889 << TRI->getSubRegIndexName(CP.getSrcIdx()) << '\n';
1891 dbgs() << printReg(CP.getSrcReg(), TRI) << " in "
1892 << printReg(CP.getDstReg(), TRI, CP.getSrcIdx()) << '\n';
1903 if (!joinIntervals(CP)) {
1909 if (reMaterializeTrivialDef(CP, CopyMI, IsDefCopy))
1914 if (!CP.isPartial() && !CP.isPhys()) {
1915 bool Changed = adjustCopiesBackFrom(CP, CopyMI);
1918 std::tie(Changed, Shrink) = removeCopyByCommutingDef(CP, CopyMI);
1922 unsigned DstReg = CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg();
1934 if (!CP.isPartial() && !CP.isPhys())
1935 if (removePartialRedundancy(CP, *CopyMI))
1946 if (CP.isCrossClass()) {
1948 MRI->setRegClass(CP.getDstReg(), CP.getNewRC());
1953 if (!CP.isPhys() && RegClassInfo.isProperSubClass(CP.getNewRC()))
1954 InflateRegs.push_back(CP.getDstReg());
1963 if (CP.getDstIdx())
1964 updateRegDefsUses(CP.getDstReg(), CP.getDstReg(), CP.getDstIdx());
1965 updateRegDefsUses(CP.getSrcReg(), CP.getDstReg(), CP.getSrcIdx());
1969 LiveInterval &LI = LIS->getInterval(CP.getDstReg());
1980 // CP.getSrcReg()'s live interval has been merged into CP.getDstReg's live
1981 // interval. Since CP.getSrcReg() is in ToBeUpdated set and its live interval
1983 if (ToBeUpdated.count(CP.getSrcReg()))
1987 LiveInterval &LI = LIS->getInterval(CP.getDstReg());
1993 LIS->removeInterval(CP.getSrcReg());
1996 TRI->updateRegAllocHint(CP.getSrcReg(), CP.getDstReg(), *MF);
1999 dbgs() << "\tSuccess: " << printReg(CP.getSrcReg(), TRI, CP.getSrcIdx())
2000 << " -> " << printReg(CP.getDstReg(), TRI, CP.getDstIdx()) << '\n';
2002 if (CP.isPhys())
2003 dbgs() << printReg(CP.getDstReg(), TRI);
2005 dbgs() << LIS->getInterval(CP.getDstReg());
2013 bool RegisterCoalescer::joinReservedPhysReg(CoalescerPair &CP) {
2014 unsigned DstReg = CP.getDstReg();
2015 unsigned SrcReg = CP.getSrcReg();
2016 assert(CP.isPhys() && "Must be a physreg copy");
2060 if (CP.isFlipped()) {
2123 MRI->clearKillFlags(CP.getSrcReg());
2206 /// subregister SubIdx in the coalesced register. Either CP.DstIdx or
2207 /// CP.SrcIdx.
2224 const CoalescerPair &CP;
2379 NewVNInfo(newVNInfo), CP(cp), LIS(lis), Indexes(LIS->getSlotIndexes()),
2680 if (CP.isCoalescable(DefMI)) {
2697 if (DefMI->isFullCopy() && !CP.isPartial() &&
3234 if (Register::isVirtualRegister(Reg) && Reg != CP.getSrcReg() &&
3235 Reg != CP.getDstReg())
3252 const CoalescerPair &CP) {
3254 JoinVals RHSVals(RRange, CP.getSrcReg(), CP.getSrcIdx(), LaneMask,
3255 NewVNInfo, CP, LIS, TRI, true, true);
3256 JoinVals LHSVals(LRange, CP.getDstReg(), CP.getDstIdx(), LaneMask,
3257 NewVNInfo, CP, LIS, TRI, true, true);
3316 CoalescerPair &CP,
3321 [this, &Allocator, &ToMerge, &CP](LiveInterval::SubRange &SR) {
3327 joinSubRegRanges(SR, RangeCopy, SR.LaneMask, CP);
3344 bool RegisterCoalescer::joinVirtRegs(CoalescerPair &CP) {
3346 LiveInterval &RHS = LIS->getInterval(CP.getSrcReg());
3347 LiveInterval &LHS = LIS->getInterval(CP.getDstReg());
3348 bool TrackSubRegLiveness = MRI->shouldTrackSubRegLiveness(*CP.getNewRC());
3349 JoinVals RHSVals(RHS, CP.getSrcReg(), CP.getSrcIdx(), LaneBitmask::getNone(),
3350 NewVNInfo, CP, LIS, TRI, false, TrackSubRegLiveness);
3351 JoinVals LHSVals(LHS, CP.getDstReg(), CP.getDstIdx(), LaneBitmask::getNone(),
3352 NewVNInfo, CP, LIS, TRI, false, TrackSubRegLiveness);
3374 unsigned DstIdx = CP.getDstIdx();
3376 LaneBitmask Mask = DstIdx == 0 ? CP.getNewRC()->getLaneMask()
3388 LLVM_DEBUG(dbgs() << "\t\tLHST = " << printReg(CP.getDstReg()) << ' ' << LHS
3392 unsigned SrcIdx = CP.getSrcIdx();
3394 LaneBitmask Mask = SrcIdx == 0 ? CP.getNewRC()->getLaneMask()
3396 mergeSubRangeInto(LHS, RHS, Mask, CP, DstIdx);
3401 mergeSubRangeInto(LHS, R, Mask, CP, DstIdx);
3431 checkMergingChangesDbgValues(CP, LHS, LHSVals, RHS, RHSVals);
3460 bool RegisterCoalescer::joinIntervals(CoalescerPair &CP) {
3461 return CP.isPhys() ? joinReservedPhysReg(CP) : joinVirtRegs(CP);
3503 void RegisterCoalescer::checkMergingChangesDbgValues(CoalescerPair &CP,
3526 PerformScan(CP.getSrcReg(), ScanForSrcReg);
3527 PerformScan(CP.getDstReg(), ScanForDstReg);