mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Build the Hopfield network incrementally when splitting global live ranges.
It is common for large live ranges to have few basic blocks with register uses and many live-through blocks without any uses. This approach grows the Hopfield network incrementally around the use blocks, completely avoiding checking interference for some through blocks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129188 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -132,12 +132,14 @@ void SplitAnalysis::analyzeUses() {
|
||||
DEBUG(dbgs() << "Analyze counted "
|
||||
<< UseSlots.size() << " instrs in "
|
||||
<< UseBlocks.size() << " blocks, through "
|
||||
<< ThroughBlocks.size() << " blocks.\n");
|
||||
<< NumThroughBlocks << " blocks.\n");
|
||||
}
|
||||
|
||||
/// calcLiveBlockInfo - Fill the LiveBlocks array with information about blocks
|
||||
/// where CurLI is live.
|
||||
bool SplitAnalysis::calcLiveBlockInfo() {
|
||||
ThroughBlocks.resize(MF.getNumBlockIDs());
|
||||
NumThroughBlocks = 0;
|
||||
if (CurLI->empty())
|
||||
return true;
|
||||
|
||||
@ -193,9 +195,10 @@ bool SplitAnalysis::calcLiveBlockInfo() {
|
||||
BI.LiveThrough = !hasGap && BI.LiveIn && BI.LiveOut;
|
||||
if (Uses)
|
||||
UseBlocks.push_back(BI);
|
||||
else
|
||||
ThroughBlocks.push_back(BI.MBB->getNumber());
|
||||
|
||||
else {
|
||||
++NumThroughBlocks;
|
||||
ThroughBlocks.set(BI.MBB->getNumber());
|
||||
}
|
||||
// FIXME: This should never happen. The live range stops or starts without a
|
||||
// corresponding use. An earlier pass did something wrong.
|
||||
if (!BI.LiveThrough && !Uses)
|
||||
|
Reference in New Issue
Block a user