diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-12-15 17:41:19 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-12-15 17:41:19 +0000 |
| commit | 4391f34abad97e505bfb8964cdf22575e0a72dbb (patch) | |
| tree | 25e366ad47b716e496db0514b77aced281424e79 | |
| parent | b55fdf8c6f4bd50dc930f7b89a5e2a394447d712 (diff) | |
| download | bcm5719-llvm-4391f34abad97e505bfb8964cdf22575e0a72dbb.tar.gz bcm5719-llvm-4391f34abad97e505bfb8964cdf22575e0a72dbb.zip | |
Separate SplitAnalysis::getSplitLoops().
This method returns the set of loops with uses that are candidates for
splitting.
llvm-svn: 121870
| -rw-r--r-- | llvm/lib/CodeGen/SplitKit.cpp | 17 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SplitKit.h | 4 |
2 files changed, 14 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/SplitKit.cpp b/llvm/lib/CodeGen/SplitKit.cpp index ed2725eed9c..fd18729b85b 100644 --- a/llvm/lib/CodeGen/SplitKit.cpp +++ b/llvm/lib/CodeGen/SplitKit.cpp @@ -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; diff --git a/llvm/lib/CodeGen/SplitKit.h b/llvm/lib/CodeGen/SplitKit.h index b1d5a47804f..f290eb64610 100644 --- a/llvm/lib/CodeGen/SplitKit.h +++ b/llvm/lib/CodeGen/SplitKit.h @@ -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(); |

