mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-29 14:40:25 +00:00
Only mark remainder intervals as RS_Spill after per-block splitting.
The local ranges created get to stay in the RS_New stage, just like for local and region splitting. This gives tryLocalSplit a bit more freedom the first time it sees one of these new local ranges. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137001 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1f8804263f
commit
a9c41d39d1
@ -1227,12 +1227,22 @@ unsigned RAGreedy::tryBlockSplit(LiveInterval &VirtReg, AllocationOrder &Order,
|
||||
return 0;
|
||||
|
||||
// We did split for some blocks.
|
||||
SE->finish();
|
||||
SmallVector<unsigned, 8> IntvMap;
|
||||
SE->finish(&IntvMap);
|
||||
|
||||
// Tell LiveDebugVariables about the new ranges.
|
||||
DebugVars->splitRegister(Reg, LREdit.regs());
|
||||
|
||||
setStage(NewVRegs.begin(), NewVRegs.end(), RS_Spill);
|
||||
ExtraRegInfo.resize(MRI->getNumVirtRegs());
|
||||
|
||||
// Sort out the new intervals created by splitting. The remainder interval
|
||||
// goes straight to spilling, the new local ranges get to stay RS_New.
|
||||
for (unsigned i = 0, e = LREdit.size(); i != e; ++i) {
|
||||
LiveInterval &LI = *LREdit.get(i);
|
||||
if (getStage(LI) == RS_New && IntvMap[i] == 0)
|
||||
setStage(LI, RS_Spill);
|
||||
}
|
||||
|
||||
if (VerifyEnabled)
|
||||
MF->verify(this, "After splitting live range around basic blocks");
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user