Lines Matching refs:LI

188 bool LiveIntervals::computeVirtRegInterval(LiveInterval &LI) {  in computeVirtRegInterval()  argument
190 assert(LI.empty() && "Should only compute empty intervals."); in computeVirtRegInterval()
192 LICalc->calculate(LI, MRI->shouldTrackSubRegLiveness(LI.reg())); in computeVirtRegInterval()
193 return computeDeadValues(LI, nullptr); in computeVirtRegInterval()
201 LiveInterval &LI = createEmptyInterval(Reg); in computeVirtRegs() local
202 bool NeedSplit = computeVirtRegInterval(LI); in computeVirtRegs()
205 splitSeparateComponents(LI, SplitLIs); in computeVirtRegs()
331 for (const auto &LI : MBB.liveins()) { in computeLiveInRegUnits() local
332 for (MCRegUnit Unit : TRI->regunits(LI.PhysReg)) { in computeLiveInRegUnits()
384 const LiveInterval &LI = getInterval(Reg); in extendSegmentsToUses() local
385 const LiveRange &OldRange = getSubRange(LI, LaneMask); in extendSegmentsToUses()
435 LI.computeSubRangeUndefs(Undefs, LaneMask, *MRI, *Indexes); in extendSegmentsToUses()
502 bool LiveIntervals::computeDeadValues(LiveInterval &LI, in computeDeadValues() argument
506 for (VNInfo *VNI : LI.valnos) { in computeDeadValues()
510 LiveRange::iterator I = LI.FindSegmentContaining(Def); in computeDeadValues()
511 assert(I != LI.end() && "Missing segment for VNI"); in computeDeadValues()
515 Register VReg = LI.reg(); in computeDeadValues()
517 if ((I == LI.begin() || std::prev(I)->end < Def) && !VNI->isPHIDef()) { in computeDeadValues()
528 LI.removeSegment(I); in computeDeadValues()
534 MI->addRegisterDead(LI.reg(), TRI); in computeDeadValues()
694 const LiveInterval &LI = getInterval(Reg); in addKillFlags() local
695 if (LI.empty()) in addKillFlags()
710 RU.push_back(std::make_pair(&RURange, RURange.find(LI.begin()->end))); in addKillFlags()
714 for (LiveInterval::const_iterator RI = LI.begin(), RE = LI.end(); RI != RE; in addKillFlags()
756 if (LI.hasSubRanges()) { in addKillFlags()
759 for (const LiveInterval::SubRange &SR : LI.subranges()) in addKillFlags()
796 if (N != LI.end() && N->start == RI->end) in addKillFlags()
810 LiveIntervals::intervalIsInOneMBB(const LiveInterval &LI) const { in intervalIsInOneMBB()
811 assert(!LI.empty() && "LiveInterval is empty."); in intervalIsInOneMBB()
820 SlotIndex Start = LI.beginIndex(); in intervalIsInOneMBB()
824 SlotIndex Stop = LI.endIndex(); in intervalIsInOneMBB()
836 LiveIntervals::hasPHIKill(const LiveInterval &LI, const VNInfo *VNI) const { in hasPHIKill() argument
837 for (const VNInfo *PHI : LI.valnos) { in hasPHIKill()
845 if (VNI == LI.getVNInfoBefore(Indexes->getMBBEndIdx(Pred))) in hasPHIKill()
897 bool LiveIntervals::checkRegMaskInterference(const LiveInterval &LI, in checkRegMaskInterference() argument
899 if (LI.empty()) in checkRegMaskInterference()
901 LiveInterval::const_iterator LiveI = LI.begin(), LiveE = LI.end(); in checkRegMaskInterference()
906 if (MachineBasicBlock *MBB = intervalIsInOneMBB(LI)) { in checkRegMaskInterference()
947 if (hasLiveThroughUse(MI, LI.reg())) in checkRegMaskInterference()
951 if (++LiveI == LiveE || SlotI == SlotE || *SlotI > LI.endIndex()) in checkRegMaskInterference()
1017 LiveInterval &LI = LIS.getInterval(Reg); in updateAllRanges() local
1018 if (LI.hasSubRanges()) { in updateAllRanges()
1022 for (LiveInterval::SubRange &S : LI.subranges()) { in updateAllRanges()
1028 updateRange(LI, Reg, LaneBitmask::getNone()); in updateAllRanges()
1035 if (LI.hasSubRanges()) { in updateAllRanges()
1039 for (LiveInterval::SubRange &S : LI.subranges()) { in updateAllRanges()
1040 if ((S.LaneMask & LaneMask).none() || LI.covers(S)) in updateAllRanges()
1042 LI.clear(); in updateAllRanges()
1043 LIS.constructMainRangeFromSubranges(LI); in updateAllRanges()
1545 LiveInterval &LI = getInterval(Reg); in handleMoveIntoNewBundle() local
1546 LiveQueryResult LRQ = LI.Query(Index); in handleMoveIntoNewBundle()
1689 LiveInterval &LI = getInterval(Reg); in repairIntervalsInRange() local
1691 if (!LI.hasAtLeastOneValue()) in repairIntervalsInRange()
1694 for (LiveInterval::SubRange &S : LI.subranges()) in repairIntervalsInRange()
1696 LI.removeEmptySubRanges(); in repairIntervalsInRange()
1698 repairOldRegInRange(Begin, End, EndIdx, LI, Reg); in repairIntervalsInRange()
1710 void LiveIntervals::removeVRegDefAt(LiveInterval &LI, SlotIndex Pos) { in removeVRegDefAt() argument
1713 VNInfo *VNI = LI.getVNInfoAt(Pos); in removeVRegDefAt()
1716 LI.removeValNo(VNI); in removeVRegDefAt()
1720 for (LiveInterval::SubRange &S : LI.subranges()) { in removeVRegDefAt()
1725 LI.removeEmptySubRanges(); in removeVRegDefAt()
1728 void LiveIntervals::splitSeparateComponents(LiveInterval &LI, in splitSeparateComponents() argument
1731 unsigned NumComp = ConEQ.Classify(LI); in splitSeparateComponents()
1734 LLVM_DEBUG(dbgs() << " Split " << NumComp << " components: " << LI << '\n'); in splitSeparateComponents()
1735 Register Reg = LI.reg(); in splitSeparateComponents()
1741 ConEQ.Distribute(LI, SplitLIs.data(), *MRI); in splitSeparateComponents()
1744 void LiveIntervals::constructMainRangeFromSubranges(LiveInterval &LI) { in constructMainRangeFromSubranges() argument
1747 LICalc->constructMainRangeFromSubranges(LI); in constructMainRangeFromSubranges()