mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Also use shouldSplitSingleBlock() in the fallback splitting mode.
Drop the use of SplitAnalysis::getMultiUseBlocks, there is no need to go through a SmallPtrSet any more. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136992 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2d6d86be84
commit
b3ef7f6b97
@ -1489,15 +1489,25 @@ unsigned RAGreedy::trySplit(LiveInterval &VirtReg, AllocationOrder &Order,
|
||||
}
|
||||
|
||||
// Then isolate blocks with multiple uses.
|
||||
SplitAnalysis::BlockPtrSet Blocks;
|
||||
if (SA->getMultiUseBlocks(Blocks)) {
|
||||
LiveRangeEdit LREdit(VirtReg, NewVRegs, this);
|
||||
SE->reset(LREdit);
|
||||
SE->splitSingleBlocks(Blocks);
|
||||
setStage(NewVRegs.begin(), NewVRegs.end(), RS_Spill);
|
||||
if (VerifyEnabled)
|
||||
MF->verify(this, "After splitting live range around basic blocks");
|
||||
unsigned Reg = SA->getParent().reg;
|
||||
bool SingleInstrs = RegClassInfo.isProperSubClass(MRI->getRegClass(Reg));
|
||||
LiveRangeEdit LREdit(VirtReg, NewVRegs, this);
|
||||
SE->reset(LREdit);
|
||||
ArrayRef<SplitAnalysis::BlockInfo> UseBlocks = SA->getUseBlocks();
|
||||
for (unsigned i = 0; i != UseBlocks.size(); ++i) {
|
||||
const SplitAnalysis::BlockInfo &BI = UseBlocks[i];
|
||||
if (SA->shouldSplitSingleBlock(BI, SingleInstrs))
|
||||
SE->splitSingleBlock(BI);
|
||||
}
|
||||
// No blocks were split.
|
||||
if (LREdit.empty())
|
||||
return 0;
|
||||
|
||||
// We did split for some blocks.
|
||||
SE->finish();
|
||||
setStage(NewVRegs.begin(), NewVRegs.end(), RS_Spill);
|
||||
if (VerifyEnabled)
|
||||
MF->verify(this, "After splitting live range around basic blocks");
|
||||
|
||||
// Don't assign any physregs.
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user