mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-26 12:46:00 +00:00
Fix my previous checkin to updatePressureDiffs.
There was one case that we could hit a DebugValue where I didn't think to check. DebugValues are evil. No checkinable test case, sorry. It's an obvious fix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189717 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cda04f9a0a
commit
c94e7b50c3
@ -177,8 +177,9 @@ priorNonDebug(MachineBasicBlock::iterator I,
|
|||||||
|
|
||||||
/// If this iterator is a debug value, increment until reaching the End or a
|
/// If this iterator is a debug value, increment until reaching the End or a
|
||||||
/// non-debug instruction.
|
/// non-debug instruction.
|
||||||
static MachineBasicBlock::iterator
|
static MachineBasicBlock::const_iterator
|
||||||
nextIfDebug(MachineBasicBlock::iterator I, MachineBasicBlock::iterator End) {
|
nextIfDebug(MachineBasicBlock::const_iterator I,
|
||||||
|
MachineBasicBlock::const_iterator End) {
|
||||||
for(; I != End; ++I) {
|
for(; I != End; ++I) {
|
||||||
if (!I->isDebugValue())
|
if (!I->isDebugValue())
|
||||||
break;
|
break;
|
||||||
@ -186,6 +187,18 @@ nextIfDebug(MachineBasicBlock::iterator I, MachineBasicBlock::iterator End) {
|
|||||||
return I;
|
return I;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Non-const version.
|
||||||
|
static MachineBasicBlock::iterator
|
||||||
|
nextIfDebug(MachineBasicBlock::iterator I,
|
||||||
|
MachineBasicBlock::const_iterator End) {
|
||||||
|
// Cast the return value to nonconst MachineInstr, then cast to an
|
||||||
|
// instr_iterator, which does not check for null, finally return a
|
||||||
|
// bundle_iterator.
|
||||||
|
return MachineBasicBlock::instr_iterator(
|
||||||
|
const_cast<MachineInstr*>(
|
||||||
|
&*nextIfDebug(MachineBasicBlock::const_iterator(I), End)));
|
||||||
|
}
|
||||||
|
|
||||||
/// Top-level MachineScheduler pass driver.
|
/// Top-level MachineScheduler pass driver.
|
||||||
///
|
///
|
||||||
/// Visit blocks in function order. Divide each block into scheduling regions
|
/// Visit blocks in function order. Divide each block into scheduling regions
|
||||||
@ -565,10 +578,12 @@ void ScheduleDAGMI::updatePressureDiffs(ArrayRef<unsigned> LiveUses) {
|
|||||||
// instruction's live-out.
|
// instruction's live-out.
|
||||||
const LiveInterval &LI = LIS->getInterval(Reg);
|
const LiveInterval &LI = LIS->getInterval(Reg);
|
||||||
VNInfo *VNI;
|
VNInfo *VNI;
|
||||||
if (BotRPTracker.getPos() == BB->end())
|
MachineBasicBlock::const_iterator I =
|
||||||
|
nextIfDebug(BotRPTracker.getPos(), BB->end());
|
||||||
|
if (I == BB->end())
|
||||||
VNI = LI.getVNInfoBefore(LIS->getMBBEndIdx(BB));
|
VNI = LI.getVNInfoBefore(LIS->getMBBEndIdx(BB));
|
||||||
else {
|
else {
|
||||||
LiveRangeQuery LRQ(LI, LIS->getInstructionIndex(BotRPTracker.getPos()));
|
LiveRangeQuery LRQ(LI, LIS->getInstructionIndex(I));
|
||||||
VNI = LRQ.valueIn();
|
VNI = LRQ.valueIn();
|
||||||
}
|
}
|
||||||
// RegisterPressureTracker guarantees that readsReg is true for LiveUses.
|
// RegisterPressureTracker guarantees that readsReg is true for LiveUses.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user