Lines Matching refs: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,
586 bool RegisterCoalescer::adjustCopiesBackFrom(const CoalescerPair &CP, in adjustCopiesBackFrom() argument
588 assert(!CP.isPartial() && "This doesn't work for partial copies."); in adjustCopiesBackFrom()
589 assert(!CP.isPhys() && "This doesn't work for physreg copies."); in adjustCopiesBackFrom()
592 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg()); in adjustCopiesBackFrom()
594 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg()); in adjustCopiesBackFrom()
633 if (!CP.isCoalescable(ACopyMI) || !ACopyMI->isFullCopy()) in adjustCopiesBackFrom()
775 RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP, in removeCopyByCommutingDef() argument
777 assert(!CP.isPhys()); in removeCopyByCommutingDef()
780 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg()); in removeCopyByCommutingDef()
782 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg()); in removeCopyByCommutingDef()
1063 bool RegisterCoalescer::removePartialRedundancy(const CoalescerPair &CP, in removePartialRedundancy() argument
1065 assert(!CP.isPhys()); in removePartialRedundancy()
1079 LIS->getInterval(CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg()); in removePartialRedundancy()
1081 LIS->getInterval(CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg()); in removePartialRedundancy()
1247 bool RegisterCoalescer::reMaterializeTrivialDef(const CoalescerPair &CP, in reMaterializeTrivialDef() argument
1251 Register SrcReg = CP.isFlipped() ? CP.getDstReg() : CP.getSrcReg(); in reMaterializeTrivialDef()
1252 unsigned SrcIdx = CP.isFlipped() ? CP.getDstIdx() : CP.getSrcIdx(); in reMaterializeTrivialDef()
1253 Register DstReg = CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg(); in reMaterializeTrivialDef()
1254 unsigned DstIdx = CP.isFlipped() ? CP.getSrcIdx() : CP.getDstIdx(); in reMaterializeTrivialDef()
1303 unsigned NewDstIdx = TRI->composeSubRegIndices(CP.getSrcIdx(), in reMaterializeTrivialDef()
1333 const TargetRegisterClass *NewRC = CP.getNewRC(); in reMaterializeTrivialDef()
1337 assert(SrcIdx == 0 && CP.isFlipped() in reMaterializeTrivialDef()
1794 bool RegisterCoalescer::canJoinPhys(const CoalescerPair &CP) { in canJoinPhys() argument
1798 if (!MRI->isReserved(CP.getDstReg())) { in canJoinPhys()
1803 LiveInterval &JoinVInt = LIS->getInterval(CP.getSrcReg()); in canJoinPhys()
1816 CoalescerPair CP(*TRI); in joinCopy() local
1817 if (!CP.setRegisters(CopyMI)) { in joinCopy()
1822 if (CP.getNewRC()) { in joinCopy()
1823 auto SrcRC = MRI->getRegClass(CP.getSrcReg()); in joinCopy()
1824 auto DstRC = MRI->getRegClass(CP.getDstReg()); in joinCopy()
1825 unsigned SrcIdx = CP.getSrcIdx(); in joinCopy()
1826 unsigned DstIdx = CP.getDstIdx(); in joinCopy()
1827 if (CP.isFlipped()) { in joinCopy()
1832 CP.getNewRC(), *LIS)) { in joinCopy()
1841 if (!CP.isPhys() && CopyMI->allDefsAreDead()) { in joinCopy()
1849 if (!CP.isPhys()) { in joinCopy()
1862 if (CP.getSrcReg() == CP.getDstReg()) { in joinCopy()
1863 LiveInterval &LI = LIS->getInterval(CP.getSrcReg()); in joinCopy()
1888 if (CP.isPhys()) { in joinCopy()
1890 << printReg(CP.getSrcReg(), TRI) << " with " in joinCopy()
1891 << printReg(CP.getDstReg(), TRI, CP.getSrcIdx()) << '\n'); in joinCopy()
1892 if (!canJoinPhys(CP)) { in joinCopy()
1896 if (reMaterializeTrivialDef(CP, CopyMI, IsDefCopy)) in joinCopy()
1904 if (!CP.isPartial() && LIS->getInterval(CP.getSrcReg()).size() > in joinCopy()
1905 LIS->getInterval(CP.getDstReg()).size()) in joinCopy()
1906 CP.flip(); in joinCopy()
1910 << TRI->getRegClassName(CP.getNewRC()) << " with "; in joinCopy()
1911 if (CP.getDstIdx() && CP.getSrcIdx()) in joinCopy()
1912 dbgs() << printReg(CP.getDstReg()) << " in " in joinCopy()
1913 << TRI->getSubRegIndexName(CP.getDstIdx()) << " and " in joinCopy()
1914 << printReg(CP.getSrcReg()) << " in " in joinCopy()
1915 << TRI->getSubRegIndexName(CP.getSrcIdx()) << '\n'; in joinCopy()
1917 dbgs() << printReg(CP.getSrcReg(), TRI) << " in " in joinCopy()
1918 << printReg(CP.getDstReg(), TRI, CP.getSrcIdx()) << '\n'; in joinCopy()
1929 if (!joinIntervals(CP)) { in joinCopy()
1935 if (reMaterializeTrivialDef(CP, CopyMI, IsDefCopy)) in joinCopy()
1940 if (!CP.isPartial() && !CP.isPhys()) { in joinCopy()
1941 bool Changed = adjustCopiesBackFrom(CP, CopyMI); in joinCopy()
1944 std::tie(Changed, Shrink) = removeCopyByCommutingDef(CP, CopyMI); in joinCopy()
1948 Register DstReg = CP.isFlipped() ? CP.getSrcReg() : CP.getDstReg(); in joinCopy()
1960 if (!CP.isPartial() && !CP.isPhys()) in joinCopy()
1961 if (removePartialRedundancy(CP, *CopyMI)) in joinCopy()
1972 if (CP.isCrossClass()) { in joinCopy()
1974 MRI->setRegClass(CP.getDstReg(), CP.getNewRC()); in joinCopy()
1979 if (!CP.isPhys() && RegClassInfo.isProperSubClass(CP.getNewRC())) in joinCopy()
1980 InflateRegs.push_back(CP.getDstReg()); in joinCopy()
1989 if (CP.getDstIdx()) in joinCopy()
1990 updateRegDefsUses(CP.getDstReg(), CP.getDstReg(), CP.getDstIdx()); in joinCopy()
1991 updateRegDefsUses(CP.getSrcReg(), CP.getDstReg(), CP.getSrcIdx()); in joinCopy()
1995 LiveInterval &LI = LIS->getInterval(CP.getDstReg()); in joinCopy()
2009 if (ToBeUpdated.count(CP.getSrcReg())) in joinCopy()
2013 LiveInterval &LI = LIS->getInterval(CP.getDstReg()); in joinCopy()
2019 LIS->removeInterval(CP.getSrcReg()); in joinCopy()
2022 TRI->updateRegAllocHint(CP.getSrcReg(), CP.getDstReg(), *MF); in joinCopy()
2025 dbgs() << "\tSuccess: " << printReg(CP.getSrcReg(), TRI, CP.getSrcIdx()) in joinCopy()
2026 << " -> " << printReg(CP.getDstReg(), TRI, CP.getDstIdx()) << '\n'; in joinCopy()
2028 if (CP.isPhys()) in joinCopy()
2029 dbgs() << printReg(CP.getDstReg(), TRI); in joinCopy()
2031 dbgs() << LIS->getInterval(CP.getDstReg()); in joinCopy()
2039 bool RegisterCoalescer::joinReservedPhysReg(CoalescerPair &CP) { in joinReservedPhysReg() argument
2040 Register DstReg = CP.getDstReg(); in joinReservedPhysReg()
2041 Register SrcReg = CP.getSrcReg(); in joinReservedPhysReg()
2042 assert(CP.isPhys() && "Must be a physreg copy"); in joinReservedPhysReg()
2086 if (CP.isFlipped()) { in joinReservedPhysReg()
2149 MRI->clearKillFlags(CP.getSrcReg()); in joinReservedPhysReg()
2250 const CoalescerPair &CP; member in __anon6e65837a0311::JoinVals
2405 NewVNInfo(newVNInfo), CP(cp), LIS(lis), Indexes(LIS->getSlotIndexes()), in JoinVals()
2701 if (CP.isCoalescable(DefMI)) { in analyzeValue()
2718 if (DefMI->isFullCopy() && !CP.isPartial() && in analyzeValue()
3256 if (Register::isVirtualRegister(Reg) && Reg != CP.getSrcReg() && in eraseInstrs()
3257 Reg != CP.getDstReg()) in eraseInstrs()
3274 const CoalescerPair &CP) { in joinSubRegRanges() argument
3276 JoinVals RHSVals(RRange, CP.getSrcReg(), CP.getSrcIdx(), LaneMask, in joinSubRegRanges()
3277 NewVNInfo, CP, LIS, TRI, true, true); in joinSubRegRanges()
3278 JoinVals LHSVals(LRange, CP.getDstReg(), CP.getDstIdx(), LaneMask, in joinSubRegRanges()
3279 NewVNInfo, CP, LIS, TRI, true, true); in joinSubRegRanges()
3338 CoalescerPair &CP, in mergeSubRangeInto() argument
3343 [this, &Allocator, &ToMerge, &CP](LiveInterval::SubRange &SR) { in mergeSubRangeInto()
3349 joinSubRegRanges(SR, RangeCopy, SR.LaneMask, CP); in mergeSubRangeInto()
3366 bool RegisterCoalescer::joinVirtRegs(CoalescerPair &CP) { in joinVirtRegs() argument
3368 LiveInterval &RHS = LIS->getInterval(CP.getSrcReg()); in joinVirtRegs()
3369 LiveInterval &LHS = LIS->getInterval(CP.getDstReg()); in joinVirtRegs()
3370 bool TrackSubRegLiveness = MRI->shouldTrackSubRegLiveness(*CP.getNewRC()); in joinVirtRegs()
3371 JoinVals RHSVals(RHS, CP.getSrcReg(), CP.getSrcIdx(), LaneBitmask::getNone(), in joinVirtRegs()
3372 NewVNInfo, CP, LIS, TRI, false, TrackSubRegLiveness); in joinVirtRegs()
3373 JoinVals LHSVals(LHS, CP.getDstReg(), CP.getDstIdx(), LaneBitmask::getNone(), in joinVirtRegs()
3374 NewVNInfo, CP, LIS, TRI, false, TrackSubRegLiveness); in joinVirtRegs()
3396 unsigned DstIdx = CP.getDstIdx(); in joinVirtRegs()
3398 LaneBitmask Mask = DstIdx == 0 ? CP.getNewRC()->getLaneMask() in joinVirtRegs()
3410 LLVM_DEBUG(dbgs() << "\t\tLHST = " << printReg(CP.getDstReg()) << ' ' << LHS in joinVirtRegs()
3414 unsigned SrcIdx = CP.getSrcIdx(); in joinVirtRegs()
3416 LaneBitmask Mask = SrcIdx == 0 ? CP.getNewRC()->getLaneMask() in joinVirtRegs()
3418 mergeSubRangeInto(LHS, RHS, Mask, CP, DstIdx); in joinVirtRegs()
3423 mergeSubRangeInto(LHS, R, Mask, CP, DstIdx); in joinVirtRegs()
3453 checkMergingChangesDbgValues(CP, LHS, LHSVals, RHS, RHSVals); in joinVirtRegs()
3482 bool RegisterCoalescer::joinIntervals(CoalescerPair &CP) { in joinIntervals() argument
3483 return CP.isPhys() ? joinReservedPhysReg(CP) : joinVirtRegs(CP); in joinIntervals()
3525 void RegisterCoalescer::checkMergingChangesDbgValues(CoalescerPair &CP, in checkMergingChangesDbgValues() argument
3548 PerformScan(CP.getSrcReg(), ScanForSrcReg); in checkMergingChangesDbgValues()
3549 PerformScan(CP.getDstReg(), ScanForDstReg); in checkMergingChangesDbgValues()