Separate SplitAnalysis::getSplitLoops().

This method returns the set of loops with uses that are candidates for
splitting.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121870 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen 2010-12-15 17:41:19 +00:00
parent 333f5194cb
commit 521a453721
2 changed files with 14 additions and 7 deletions

View File

@ -257,12 +257,11 @@ void SplitAnalysis::analyze(const LiveInterval *li) {
analyzeUses();
}
const MachineLoop *SplitAnalysis::getBestSplitLoop() {
assert(curli_ && "Call analyze() before getBestSplitLoop");
void SplitAnalysis::getSplitLoops(LoopPtrSet &Loops) {
assert(curli_ && "Call analyze() before getSplitLoops");
if (usingLoops_.empty())
return 0;
return;
LoopPtrSet Loops;
LoopBlocks Blocks;
BlockPtrSet CriticalExits;
@ -280,11 +279,11 @@ const MachineLoop *SplitAnalysis::getBestSplitLoop() {
// FIXME: We could split a live range with multiple uses in a peripheral
// block and still make progress. However, it is possible that splitting
// another live range will insert copies into a peripheral block, and
// there is a small chance we can enter an infinity loop, inserting copies
// there is a small chance we can enter an infinite loop, inserting copies
// forever.
// For safety, stick to splitting live ranges with uses outside the
// periphery.
DEBUG(dbgs() << ": multiple peripheral uses\n");
DEBUG(dbgs() << ": multiple peripheral uses");
break;
case ContainedInLoop:
DEBUG(dbgs() << ": fully contained\n");
@ -302,9 +301,13 @@ const MachineLoop *SplitAnalysis::getBestSplitLoop() {
Loops.insert(Loop);
}
DEBUG(dbgs() << " getBestSplitLoop found " << Loops.size()
DEBUG(dbgs() << " getSplitLoops found " << Loops.size()
<< " candidate loops.\n");
}
const MachineLoop *SplitAnalysis::getBestSplitLoop() {
LoopPtrSet Loops;
getSplitLoops(Loops);
if (Loops.empty())
return 0;

View File

@ -133,6 +133,10 @@ public:
/// these edges, but they do require special treatment.
void getCriticalPreds(const LoopBlocks &Blocks, BlockPtrSet &CriticalPreds);
/// getSplitLoops - Get the set of loops that have curli uses and would be
/// profitable to split.
void getSplitLoops(LoopPtrSet&);
/// getBestSplitLoop - Return the loop where curli may best be split to a
/// separate register, or NULL.
const MachineLoop *getBestSplitLoop();