mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-25 00:29:20 +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
|
||||
/// non-debug instruction.
|
||||
static MachineBasicBlock::iterator
|
||||
nextIfDebug(MachineBasicBlock::iterator I, MachineBasicBlock::iterator End) {
|
||||
static MachineBasicBlock::const_iterator
|
||||
nextIfDebug(MachineBasicBlock::const_iterator I,
|
||||
MachineBasicBlock::const_iterator End) {
|
||||
for(; I != End; ++I) {
|
||||
if (!I->isDebugValue())
|
||||
break;
|
||||
@ -186,6 +187,18 @@ nextIfDebug(MachineBasicBlock::iterator I, MachineBasicBlock::iterator End) {
|
||||
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.
|
||||
///
|
||||
/// 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.
|
||||
const LiveInterval &LI = LIS->getInterval(Reg);
|
||||
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));
|
||||
else {
|
||||
LiveRangeQuery LRQ(LI, LIS->getInstructionIndex(BotRPTracker.getPos()));
|
||||
LiveRangeQuery LRQ(LI, LIS->getInstructionIndex(I));
|
||||
VNI = LRQ.valueIn();
|
||||
}
|
||||
// RegisterPressureTracker guarantees that readsReg is true for LiveUses.
|
||||
|
Loading…
Reference in New Issue
Block a user