LLVM: lib/CodeGen/RegisterPressure.cpp File Reference (original) (raw)

Go to the source code of this file.

Functions
static void increaseSetPressure (std::vector< unsigned > &CurrSetPressure, const MachineRegisterInfo &MRI, VirtRegOrUnit VRegOrUnit, LaneBitmask PrevMask, LaneBitmask NewMask)
Increase pressure for each pressure set provided by TargetRegisterInfo.
static void decreaseSetPressure (std::vector< unsigned > &CurrSetPressure, const MachineRegisterInfo &MRI, VirtRegOrUnit VRegOrUnit, LaneBitmask PrevMask, LaneBitmask NewMask)
Decrease pressure for each pressure set provided by TargetRegisterInfo.
static const LiveRange * getLiveRange (const LiveIntervals &LIS, VirtRegOrUnit VRegOrUnit)
static LaneBitmask getRegLanes (ArrayRef< VRegMaskOrUnit > RegUnits, VirtRegOrUnit VRegOrUnit)
static void addRegLanes (SmallVectorImpl< VRegMaskOrUnit > &RegUnits, VRegMaskOrUnit Pair)
static void setRegZero (SmallVectorImpl< VRegMaskOrUnit > &RegUnits, VirtRegOrUnit VRegOrUnit)
static void removeRegLanes (SmallVectorImpl< VRegMaskOrUnit > &RegUnits, VRegMaskOrUnit Pair)
static LaneBitmask getLanesWithProperty (const LiveIntervals &LIS, const MachineRegisterInfo &MRI, bool TrackLaneMasks, VirtRegOrUnit VRegOrUnit, SlotIndex Pos, LaneBitmask SafeDefault, bool(*Property)(const LiveRange &LR, SlotIndex Pos))
static LaneBitmask getLiveLanesAt (const LiveIntervals &LIS, const MachineRegisterInfo &MRI, bool TrackLaneMasks, VirtRegOrUnit VRegOrUnit, SlotIndex Pos)
static void computeExcessPressureDelta (ArrayRef< unsigned > OldPressureVec, ArrayRef< unsigned > NewPressureVec, RegPressureDelta &Delta, const RegisterClassInfo *RCI, ArrayRef< unsigned > LiveThruPressureVec)
Find the max change in excess pressure across all sets.
static void computeMaxPressureDelta (ArrayRef< unsigned > OldMaxPressureVec, ArrayRef< unsigned > NewMaxPressureVec, ArrayRef< PressureChange > CriticalPSets, ArrayRef< unsigned > MaxPressureLimit, RegPressureDelta &Delta)
Find the max change in max pressure that either surpasses a critical PSet limit or exceeds the current MaxPressureLimit.
static LaneBitmask findUseBetween (VirtRegOrUnit VRegOrUnit, LaneBitmask LastUseMask, SlotIndex PriorUseIdx, SlotIndex NextUseIdx, const MachineRegisterInfo &MRI, const LiveIntervals *LIS)
Helper to find a vreg use between two indices [PriorUseIdx, NextUseIdx).

addRegLanes()

Definition at line 380 of file RegisterPressure.cpp.

References llvm::LaneBitmask::any(), assert(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::find_if(), I, llvm::VRegMaskOrUnit::LaneMask, llvm::Other, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::VRegMaskOrUnit::VRegOrUnit.

Referenced by llvm::RegPressureTracker::recede().

computeExcessPressureDelta()

computeMaxPressureDelta()

decreaseSetPressure()

findUseBetween()

Helper to find a vreg use between two indices [PriorUseIdx, NextUseIdx).

The query starts with a lane bitmask which gets lanes/bits removed for every use we find.

Definition at line 1213 of file RegisterPressure.cpp.

References llvm::VirtRegOrUnit::asMCRegUnit(), llvm::VirtRegOrUnit::asVirtualReg(), llvm::LiveIntervals::getInstructionIndex(), llvm::LaneBitmask::getNone(), llvm::MachineOperand::getParent(), llvm::SlotIndex::getRegSlot(), llvm::MachineOperand::getSubReg(), llvm::MachineOperand::isUndef(), llvm::VirtRegOrUnit::isVirtualReg(), MI, MRI, llvm::LaneBitmask::none(), Reg, Register, and TRI.

Referenced by llvm::GCNDownwardRPTracker::bumpDownwardPressure(), and llvm::RegPressureTracker::bumpDownwardPressure().

getLanesWithProperty()

Definition at line 421 of file RegisterPressure.cpp.

References llvm::VirtRegOrUnit::asMCRegUnit(), llvm::VirtRegOrUnit::asVirtualReg(), llvm::LaneBitmask::getAll(), llvm::LiveIntervals::getCachedRegUnit(), llvm::LiveIntervals::getInterval(), llvm::LaneBitmask::getNone(), llvm::LiveInterval::hasSubRanges(), llvm::VirtRegOrUnit::isVirtualReg(), MRI, and llvm::LiveInterval::subranges().

Referenced by llvm::GCNRPTracker::getLastUsedLanes(), llvm::RegPressureTracker::getLastUsedLanes(), getLiveLanesAt(), llvm::RegPressureTracker::getLiveLanesAt(), and llvm::RegPressureTracker::getLiveThroughAt().

getLiveLanesAt()

getLiveRange()

getRegLanes()

increaseSetPressure()

removeRegLanes()

setRegZero()