Implement single block splitting.

Before spilling a live range, we split it into a separate range for each basic
block where it is used. That way we only get one reload per basic block if the
new smaller ranges can allocate to a register.

This type of splitting is already present in the standard spiller.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110934 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen
2010-08-12 17:07:14 +00:00
parent 727356fc7d
commit f1b05f2b0e
3 changed files with 158 additions and 5 deletions

View File

@@ -118,6 +118,15 @@ bool InlineSpiller::split() {
.splitAroundLoop(loop))
return true;
}
// Try splitting into single block intervals.
SplitAnalysis::BlockPtrSet blocks;
if (splitAnalysis_.getMultiUseBlocks(blocks)) {
if (SplitEditor(splitAnalysis_, lis_, vrm_, *newIntervals_)
.splitSingleBlocks(blocks))
return true;
}
return false;
}