mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Revert "(HEAD -> master, origin/master, origin/HEAD) RegisterPressure: Move LiveInRegs/LiveOutRegs from RegisterPressure to PressureTracker"
This reverts commit r247943. Accidental commit, code review was not finished yet. llvm-svn: 247945
This commit is contained in:
parent
d247f17646
commit
0bcec09bcb
@ -31,6 +31,10 @@ struct RegisterPressure {
|
||||
/// Map of max reg pressure indexed by pressure set ID, not class ID.
|
||||
std::vector<unsigned> MaxSetPressure;
|
||||
|
||||
/// List of live in virtual registers or physical register units.
|
||||
SmallVector<unsigned,8> LiveInRegs;
|
||||
SmallVector<unsigned,8> LiveOutRegs;
|
||||
|
||||
void dump(const TargetRegisterInfo *TRI) const;
|
||||
};
|
||||
|
||||
@ -263,10 +267,6 @@ class RegPressureTracker {
|
||||
|
||||
/// Set of vreg defs that start a live range.
|
||||
SparseSet<unsigned, VirtReg2IndexFunctor> UntiedDefs;
|
||||
/// List of live in virtual registers or physical register units.
|
||||
SmallVector<unsigned,8> LiveInRegs;
|
||||
/// List of live out virtual registers or physical register units.
|
||||
SmallVector<unsigned,8> LiveOutRegs;
|
||||
/// Live-through pressure.
|
||||
std::vector<unsigned> LiveThruPressure;
|
||||
|
||||
@ -323,8 +323,6 @@ public:
|
||||
LiveThruPressure.assign(PressureSet.begin(), PressureSet.end());
|
||||
}
|
||||
|
||||
ArrayRef<unsigned> getLiveIn() const { return LiveInRegs; }
|
||||
ArrayRef<unsigned> getLiveOut() const { return LiveOutRegs; }
|
||||
ArrayRef<unsigned> getLiveThru() const { return LiveThruPressure; }
|
||||
|
||||
/// Get the resulting register pressure over the traversed region.
|
||||
|
@ -878,8 +878,8 @@ void ScheduleDAGMILive::initRegPressure() {
|
||||
DEBUG(RPTracker.dump());
|
||||
|
||||
// Initialize the live ins and live outs.
|
||||
TopRPTracker.addLiveRegs(RPTracker.getLiveIn());
|
||||
BotRPTracker.addLiveRegs(RPTracker.getLiveOut());
|
||||
TopRPTracker.addLiveRegs(RPTracker.getPressure().LiveInRegs);
|
||||
BotRPTracker.addLiveRegs(RPTracker.getPressure().LiveOutRegs);
|
||||
|
||||
// Close one end of the tracker so we can call
|
||||
// getMaxUpward/DownwardPressureDelta before advancing across any
|
||||
@ -896,7 +896,7 @@ void ScheduleDAGMILive::initRegPressure() {
|
||||
|
||||
// For each live out vreg reduce the pressure change associated with other
|
||||
// uses of the same vreg below the live-out reaching def.
|
||||
updatePressureDiffs(RPTracker.getLiveOut());
|
||||
updatePressureDiffs(RPTracker.getPressure().LiveOutRegs);
|
||||
|
||||
// Account for liveness generated by the region boundary.
|
||||
if (LiveRegionEnd != RegionEnd) {
|
||||
@ -1135,7 +1135,7 @@ unsigned ScheduleDAGMILive::computeCyclicCriticalPath() {
|
||||
|
||||
unsigned MaxCyclicLatency = 0;
|
||||
// Visit each live out vreg def to find def/use pairs that cross iterations.
|
||||
ArrayRef<unsigned> LiveOuts = RPTracker.getLiveOut();
|
||||
ArrayRef<unsigned> LiveOuts = RPTracker.getPressure().LiveOutRegs;
|
||||
for (ArrayRef<unsigned>::iterator RI = LiveOuts.begin(), RE = LiveOuts.end();
|
||||
RI != RE; ++RI) {
|
||||
unsigned Reg = *RI;
|
||||
|
@ -58,6 +58,14 @@ LLVM_DUMP_METHOD
|
||||
void RegisterPressure::dump(const TargetRegisterInfo *TRI) const {
|
||||
dbgs() << "Max Pressure: ";
|
||||
dumpRegSetPressure(MaxSetPressure, TRI);
|
||||
dbgs() << "Live In: ";
|
||||
for (unsigned i = 0, e = LiveInRegs.size(); i < e; ++i)
|
||||
dbgs() << PrintVRegOrUnit(LiveInRegs[i], TRI) << " ";
|
||||
dbgs() << '\n';
|
||||
dbgs() << "Live Out: ";
|
||||
for (unsigned i = 0, e = LiveOutRegs.size(); i < e; ++i)
|
||||
dbgs() << PrintVRegOrUnit(LiveOutRegs[i], TRI) << " ";
|
||||
dbgs() << '\n';
|
||||
}
|
||||
|
||||
LLVM_DUMP_METHOD
|
||||
@ -67,14 +75,6 @@ void RegPressureTracker::dump() const {
|
||||
dumpRegSetPressure(CurrSetPressure, TRI);
|
||||
}
|
||||
P.dump(TRI);
|
||||
dbgs() << "Live In: ";
|
||||
for (unsigned i = 0, e = LiveInRegs.size(); i < e; ++i)
|
||||
dbgs() << PrintVRegOrUnit(LiveInRegs[i], TRI) << " ";
|
||||
dbgs() << '\n';
|
||||
dbgs() << "Live Out: ";
|
||||
for (unsigned i = 0, e = LiveOutRegs.size(); i < e; ++i)
|
||||
dbgs() << PrintVRegOrUnit(LiveOutRegs[i], TRI) << " ";
|
||||
dbgs() << '\n';
|
||||
}
|
||||
|
||||
void PressureDiff::dump(const TargetRegisterInfo &TRI) const {
|
||||
@ -112,12 +112,16 @@ void RegPressureTracker::decreaseRegPressure(ArrayRef<unsigned> RegUnits) {
|
||||
void IntervalPressure::reset() {
|
||||
TopIdx = BottomIdx = SlotIndex();
|
||||
MaxSetPressure.clear();
|
||||
LiveInRegs.clear();
|
||||
LiveOutRegs.clear();
|
||||
}
|
||||
|
||||
/// Clear the result so it can be used for another round of pressure tracking.
|
||||
void RegionPressure::reset() {
|
||||
TopPos = BottomPos = MachineBasicBlock::const_iterator();
|
||||
MaxSetPressure.clear();
|
||||
LiveInRegs.clear();
|
||||
LiveOutRegs.clear();
|
||||
}
|
||||
|
||||
/// If the current top is not less than or equal to the next index, open it.
|
||||
@ -126,6 +130,7 @@ void IntervalPressure::openTop(SlotIndex NextTop) {
|
||||
if (TopIdx <= NextTop)
|
||||
return;
|
||||
TopIdx = SlotIndex();
|
||||
LiveInRegs.clear();
|
||||
}
|
||||
|
||||
/// If the current top is the previous instruction (before receding), open it.
|
||||
@ -133,6 +138,7 @@ void RegionPressure::openTop(MachineBasicBlock::const_iterator PrevTop) {
|
||||
if (TopPos != PrevTop)
|
||||
return;
|
||||
TopPos = MachineBasicBlock::const_iterator();
|
||||
LiveInRegs.clear();
|
||||
}
|
||||
|
||||
/// If the current bottom is not greater than the previous index, open it.
|
||||
@ -140,6 +146,7 @@ void IntervalPressure::openBottom(SlotIndex PrevBottom) {
|
||||
if (BottomIdx > PrevBottom)
|
||||
return;
|
||||
BottomIdx = SlotIndex();
|
||||
LiveInRegs.clear();
|
||||
}
|
||||
|
||||
/// If the current bottom is the previous instr (before advancing), open it.
|
||||
@ -147,6 +154,7 @@ void RegionPressure::openBottom(MachineBasicBlock::const_iterator PrevBottom) {
|
||||
if (BottomPos != PrevBottom)
|
||||
return;
|
||||
BottomPos = MachineBasicBlock::const_iterator();
|
||||
LiveInRegs.clear();
|
||||
}
|
||||
|
||||
const LiveRange *RegPressureTracker::getLiveRange(unsigned Reg) const {
|
||||
@ -167,8 +175,6 @@ void RegPressureTracker::reset() {
|
||||
static_cast<IntervalPressure&>(P).reset();
|
||||
else
|
||||
static_cast<RegionPressure&>(P).reset();
|
||||
LiveInRegs.clear();
|
||||
LiveOutRegs.clear();
|
||||
|
||||
LiveRegs.PhysRegs.clear();
|
||||
LiveRegs.VirtRegs.clear();
|
||||
@ -243,10 +249,10 @@ void RegPressureTracker::closeTop() {
|
||||
else
|
||||
static_cast<RegionPressure&>(P).TopPos = CurrPos;
|
||||
|
||||
assert(LiveInRegs.empty() && "inconsistent max pressure result");
|
||||
LiveInRegs.reserve(LiveRegs.PhysRegs.size() + LiveRegs.VirtRegs.size());
|
||||
LiveInRegs.append(LiveRegs.PhysRegs.begin(), LiveRegs.PhysRegs.end());
|
||||
LiveInRegs.append(LiveRegs.VirtRegs.begin(), LiveRegs.VirtRegs.end());
|
||||
assert(P.LiveInRegs.empty() && "inconsistent max pressure result");
|
||||
P.LiveInRegs.reserve(LiveRegs.PhysRegs.size() + LiveRegs.VirtRegs.size());
|
||||
P.LiveInRegs.append(LiveRegs.PhysRegs.begin(), LiveRegs.PhysRegs.end());
|
||||
P.LiveInRegs.append(LiveRegs.VirtRegs.begin(), LiveRegs.VirtRegs.end());
|
||||
}
|
||||
|
||||
/// Set the boundary for the bottom of the region and summarize live outs.
|
||||
@ -256,10 +262,10 @@ void RegPressureTracker::closeBottom() {
|
||||
else
|
||||
static_cast<RegionPressure&>(P).BottomPos = CurrPos;
|
||||
|
||||
assert(LiveOutRegs.empty() && "inconsistent max pressure result");
|
||||
LiveOutRegs.reserve(LiveRegs.PhysRegs.size() + LiveRegs.VirtRegs.size());
|
||||
LiveOutRegs.append(LiveRegs.PhysRegs.begin(), LiveRegs.PhysRegs.end());
|
||||
LiveOutRegs.append(LiveRegs.VirtRegs.begin(), LiveRegs.VirtRegs.end());
|
||||
assert(P.LiveOutRegs.empty() && "inconsistent max pressure result");
|
||||
P.LiveOutRegs.reserve(LiveRegs.PhysRegs.size() + LiveRegs.VirtRegs.size());
|
||||
P.LiveOutRegs.append(LiveRegs.PhysRegs.begin(), LiveRegs.PhysRegs.end());
|
||||
P.LiveOutRegs.append(LiveRegs.VirtRegs.begin(), LiveRegs.VirtRegs.end());
|
||||
}
|
||||
|
||||
/// Finalize the region boundaries and record live ins and live outs.
|
||||
@ -283,8 +289,8 @@ void RegPressureTracker::closeRegion() {
|
||||
void RegPressureTracker::initLiveThru(const RegPressureTracker &RPTracker) {
|
||||
LiveThruPressure.assign(TRI->getNumRegPressureSets(), 0);
|
||||
assert(isBottomClosed() && "need bottom-up tracking to intialize.");
|
||||
for (unsigned i = 0, e = LiveOutRegs.size(); i < e; ++i) {
|
||||
unsigned Reg = LiveOutRegs[i];
|
||||
for (unsigned i = 0, e = P.LiveOutRegs.size(); i < e; ++i) {
|
||||
unsigned Reg = P.LiveOutRegs[i];
|
||||
if (TargetRegisterInfo::isVirtualRegister(Reg)
|
||||
&& !RPTracker.hasUntiedDef(Reg)) {
|
||||
increaseSetPressure(LiveThruPressure, MRI->getPressureSets(Reg));
|
||||
@ -425,22 +431,22 @@ void RegPressureTracker::addLiveRegs(ArrayRef<unsigned> Regs) {
|
||||
/// Add Reg to the live in set and increase max pressure.
|
||||
void RegPressureTracker::discoverLiveIn(unsigned Reg) {
|
||||
assert(!LiveRegs.contains(Reg) && "avoid bumping max pressure twice");
|
||||
if (containsReg(LiveInRegs, Reg))
|
||||
if (containsReg(P.LiveInRegs, Reg))
|
||||
return;
|
||||
|
||||
// At live in discovery, unconditionally increase the high water mark.
|
||||
LiveInRegs.push_back(Reg);
|
||||
P.LiveInRegs.push_back(Reg);
|
||||
increaseSetPressure(P.MaxSetPressure, MRI->getPressureSets(Reg));
|
||||
}
|
||||
|
||||
/// Add Reg to the live out set and increase max pressure.
|
||||
void RegPressureTracker::discoverLiveOut(unsigned Reg) {
|
||||
assert(!LiveRegs.contains(Reg) && "avoid bumping max pressure twice");
|
||||
if (containsReg(LiveOutRegs, Reg))
|
||||
if (containsReg(P.LiveOutRegs, Reg))
|
||||
return;
|
||||
|
||||
// At live out discovery, unconditionally increase the high water mark.
|
||||
LiveOutRegs.push_back(Reg);
|
||||
P.LiveOutRegs.push_back(Reg);
|
||||
increaseSetPressure(P.MaxSetPressure, MRI->getPressureSets(Reg));
|
||||
}
|
||||
|
||||
@ -477,11 +483,8 @@ bool RegPressureTracker::recede(SmallVectorImpl<unsigned> *LiveUses,
|
||||
SlotIdx = LIS->getInstructionIndex(CurrPos).getRegSlot();
|
||||
|
||||
// Open the top of the region using slot indexes.
|
||||
if (isTopClosed()) {
|
||||
if (RequireIntervals)
|
||||
static_cast<IntervalPressure&>(P).openTop(SlotIdx);
|
||||
LiveInRegs.clear();
|
||||
}
|
||||
if (RequireIntervals && isTopClosed())
|
||||
static_cast<IntervalPressure&>(P).openTop(SlotIdx);
|
||||
|
||||
RegisterOperands RegOpers(TRI, MRI);
|
||||
collectOperands(CurrPos, RegOpers);
|
||||
@ -570,7 +573,6 @@ bool RegPressureTracker::advance() {
|
||||
static_cast<IntervalPressure&>(P).openBottom(SlotIdx);
|
||||
else
|
||||
static_cast<RegionPressure&>(P).openBottom(CurrPos);
|
||||
LiveOutRegs.clear();
|
||||
}
|
||||
|
||||
RegisterOperands RegOpers(TRI, MRI);
|
||||
|
Loading…
x
Reference in New Issue
Block a user