1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

Don't accidentally leave small gaps in the live ranges when leaving the active

interval after an instruction. The leaveIntvAfter() method only adds liveness
from the instruction's boundary index to the inserted copy.

Ideally, SplitKit should be smarter about this, perhaps by combining useIntv()
and leaveIntvAfter() into one method that guarantees continuity.

llvm-svn: 123858
This commit is contained in:
Jakob Stoklund Olesen 2011-01-19 23:14:56 +00:00
parent 868d2877dc
commit c47bd85657

View File

@ -757,7 +757,7 @@ void RAGreedy::splitAroundRegion(LiveInterval &VirtReg, unsigned PhysReg,
} }
if (!BI.LiveThrough) { if (!BI.LiveThrough) {
DEBUG(dbgs() << ", killed in block.\n"); DEBUG(dbgs() << ", killed in block.\n");
SE.useIntv(Start, BI.Kill); SE.useIntv(Start, BI.Kill.getBoundaryIndex());
SE.leaveIntvAfter(BI.Kill); SE.leaveIntvAfter(BI.Kill);
continue; continue;
} }
@ -765,7 +765,7 @@ void RAGreedy::splitAroundRegion(LiveInterval &VirtReg, unsigned PhysReg,
// Block is live-through, but exit bundle is on the stack. // Block is live-through, but exit bundle is on the stack.
// Spill immediately after the last use. // Spill immediately after the last use.
DEBUG(dbgs() << ", uses, stack-out.\n"); DEBUG(dbgs() << ", uses, stack-out.\n");
SE.useIntv(Start, BI.LastUse); SE.useIntv(Start, BI.LastUse.getBoundaryIndex());
SE.leaveIntvAfter(BI.LastUse); SE.leaveIntvAfter(BI.LastUse);
continue; continue;
} }
@ -789,6 +789,7 @@ void RAGreedy::splitAroundRegion(LiveInterval &VirtReg, unsigned PhysReg,
SlotIndex Use = std::lower_bound(SA->UseSlots.begin(), SA->UseSlots.end(), SlotIndex Use = std::lower_bound(SA->UseSlots.begin(), SA->UseSlots.end(),
IP.second)[-1]; IP.second)[-1];
DEBUG(dbgs() << ", free use at " << Use << ".\n"); DEBUG(dbgs() << ", free use at " << Use << ".\n");
Use = Use.getBoundaryIndex();
assert(Use >= BI.FirstUse && Use < IP.first); assert(Use >= BI.FirstUse && Use < IP.first);
SE.useIntv(Start, Use); SE.useIntv(Start, Use);
SE.leaveIntvAfter(Use); SE.leaveIntvAfter(Use);